R语言,非线性模型公式预测

时间:2014-09-04 18:19:13

标签: r predict nls

我使用一组数据(x,y)拟合指数公式。然后我想计算公式中的y值,x值超出实际数据集。它不起作用,始终打印实际x值的y值。这是代码。我做错了什么? R语言的任务解决方案是什么:

data <- data.frame(x=seq(1,69), y=othertable[1:69, 2])
nlsxypw <- nls(data$y ~ a*data$x^b, col2_60, start=list(a=2200000, b=0))
predict(nlsxypw)
#here I want to calculate the y values for x = 70-80
xnew <- seq(70, 80, 1)
predict(nlsxypw, xnew)

#it doesn't print these values, still the actual values for x=1~69.

1 个答案:

答案 0 :(得分:4)

这是一个奇怪的功能predict.nls(可能还有其他predict方法?),但你必须提供与你的模型定义的名称相同的新数据:

set.seed(123)
Data <- data.frame(
  x = 1:69, 
  y = ((1:69)**2)+rnorm(69,0,5))
nlsxypw <- nls(y ~ a*(x^b),
               data=Data,
               start=list(a=2.5, b=1))
##
xnew <- 70:80
## note how newdata is specified
y.pred <- predict(nlsxypw, newdata=list(x=xnew))
> y.pred
 [1] 4900.355 5041.359 5184.364 5329.368 5476.373 5625.377 5776.381 5929.386 6084.390 6241.393 6400.397
##
with(
  Data,
  plot(x,y,pch=20,
       xlim=c(0,90),
       ylim=c(0,6700)))

lines(fitted(nlsxypw),col="red")
points(
  x=xnew,
  y=y.pred,
  pch=20,
  col="blue")
##

enter image description here