与预定义功能一起使用时,Predict返回的值太少

时间:2019-04-12 13:24:02

标签: r predict nls

我的问题是,与预定义函数一起使用时,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

这是一个错误还是有人知道如何解决?非常感谢!

0 个答案:

没有答案