2014-09-04 158 views
2

我用一組數據(x,y)擬合指數公式。那麼我想從公式中計算出x值超出實際數據集的y值。它不起作用,總是打印實際x值的y值。這是代碼。我做錯了什麼?什麼是我的任務的解決方案有R語言: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. 

回答

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

+2

這不只是'predict.nls',這幾乎是每一個'預測()'函數在那裏。大多數人期望data.frame(或list())和變量名稱必須完全匹配。這就是爲什麼像nrussell所做的那樣使用'data ='參數總是一個好主意,而不是在公式中使用「$」。當模型只有一個獨立的協變量時,沒有「特例」。 – MrFlick 2014-09-04 19:34:53