我的问题是,与预定义函数一起使用时,predict()与nls()组合返回的值太少,我不明白为什么。
我写了一些代码来获取适合我的数据点的回归线(在我的例子中是波尔兹曼Sigmoid)。
如果我运行如下所示的所有内容,则效果很好。 Predict()(如果单独执行)将返回100个值。
# Fit
data_fit = nls(data_y~((ymin-ymax)/(1+exp((data_x-xmid)/slope))+ymax),
data=data.frame(data_x,data_y), start=list(slope=1,xmid=4.5,ymax=1,ymin=0))
# Line
lines(seq(min(data_y),max(data_y),length.out=100), predict(data_fit,
newdata=data.frame(data_x=seq(min(data_y),max(data_y),length.out=100))),
col=4,lwd=1)
如果我现在在下面定义一个类似于“玻尔兹曼”的函数并将其与predict()一起使用,我突然只能得到与数据点数量一样多的值(在我的情况下为11),因此无法画一条线,因为图中的x和y长度不再匹配,具有11个点的S形曲线看起来很糟糕。 如果仅执行#Fit和#Boltzmann,我将获得完全相同的值。
# Boltzmann
boltz = function(x,y,xmid,slope,ymin,ymax) {
nls(y~((mn-mx)/(1+exp((x-m)/k))+mx),
data=data.frame(x,y), start=list(k=slope,m=xmid,mx=ymax,mn=ymin))
}
predict(boltz(x=data_x, y=data_y, slope=1, xmid=4.5, ymax=1, ymin=0),
newdata=data.frame(data_x=seq(min(data_y),max(data_y),length.out=100)))
# -> returning 11 values (number of datapoints)
我正在使用RStudio 1.1.463(Ubuntu)和R 3.5.1
这是一个错误还是有人知道如何解决?非常感谢!