如何解决R中NLS的对比矩阵
我正在使用NLS软件包进行R中的非线性回归。我正在处理定性变量。合并定性变量的最佳方法是什么?
到目前为止,我的解决方案是
df <- data.frame(height= c(185,187,190,167,165,153),weight= c(88,75,93,73,77,61),gender=c("M","M","F","F"))
contrast_matrix_for_gender <- data.frame(contrasts(as.factor(df[,3])))
contrast_matrix_for_gender[,2] <- rownames(contrast_matrix_for_gender )
df <- merge(x= df,y=contrast_matrix_for_gender,by.x=c("gender"),by.y=c("V2"),all.x=TRUE)
df.1 <- as.matrix( df[,2:4])
nls(df.1[,1] ~ 0 + a* df.1[,2] + b*df.1[,3],start = list(a=0,b=0))
解决方法
我不太确定您在做什么,但是您给出的公式只是一个线性方程式。这就是您想要做的:
df1 <- data.frame(model.matrix(~ height + weight + gender + 0,df))
nls(height ~ a * weight + b * genderF + c * genderM,df1,list(a=0,b=0,c=0))
Nonlinear regression model
model: height ~ a * weight + b * genderF + c * genderM
data: data.frame(model.matrix(~height + weight + gender + 0,df))
a b c
0.4336 131.1688 150.3312
residual sum-of-squares: 68.79
这只是线性回归,因为您有y = XB
。因此,您可以这样做:
lm(height ~ weight + gender + 0,df)
Call:
lm(formula = height ~ weight + gender + 0,data = df)
Coefficients:
weight genderF genderM
0.4336 131.1688 150.3312
如您所见,所有系数都完全相同。
如果您有y=x^a + exp(b*x)
等公式,则将具有非线性最小二乘法。但是在您的情况下,您只有线性模型y = a*x1 + b*x2...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。