我正在尝试用R编码非线性回归,以适应有关温度和降水类型之间关系的数据。
我首先用数据创建了两个向量:
vec_temp_num
[1] -8.5 -8.0 -6.5 -6.1 -5.9 -5.8 -5.6 -5.4 -5.3 -5.1 -4.9 -4.8 -4.7 -4.5 -4.3 -4.2 -4.1
[18] -4.0 -3.9 -3.8 -3.7 -3.6 -3.5 -3.4 -3.3 -3.2 -3.1 -3.0 -2.9 -2.8 -2.6 -2.5 -2.4 -2.3
vec_rain
[1] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
[9] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000
[17] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
[25] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.33333333 0.00000000 0.00000000
vec_temp_num包含温度列表,而vec_rain对于每个温度都有一个观察到的降水类型的百分比,基本上是降雨或下雪(我选择从其中一个开始以简化过程)。两个向量都包含300行,并且都是“ as.numeric”。
功能如下:
func_rain <- function(x,b){(1/(1+exp(-b*x)))}
然后我测试了我的函数并得到了一个看起来应该是的图,因此在执行此步骤之前,一切似乎都没问题。
但是当我尝试编写nls公式时:
Rain_fit<-nls(vec_rain~func_rain(vec_temp_num,b), start=c(vec_temp_num=2.6, b=1))
我收到一条错误消息:
qr(.swts * gr)中的错误: 暗淡[产品2]与对象[300]的长度不匹配
似乎我应该将数据作为与矢量相对的矩阵(由于某些论坛建议创建矢量,所以我没有得到),但是后来我尝试直接使用数据框中的数据(df = dp。 w2 /雨和温度列):
Rain_fit<-
nls(dp.w2$rain~func_rain(dp.w2$temperature,b),start=list(temperature=2.6,rain=1,
b=1))
并收到另一条错误消息:
解析错误(text = x,keep.source = FALSE): :2:0:输入意外结束 1:〜 ^
我已经阅读了很多有关nls函数的问题/答案,但是已经有好几天了,我只是找不到适合我的数据的正确方法,因此在此先非常感谢您的帮助!
PS:我是一个初学者,所以如果您可以提供“逐步说明”或详细的(针对虚拟对象)答案,那就太好了!