2016-11-22 6 views
2

Link to dataset`predict.nls`戻り、指定` newdata`

定義されたパラメータで、予測ではなく、値をフィット:

nls.full <- nls(M ~ (m^(alpha0 + alpha1 * s + alpha2 * v + alpha3 * s * v)) * 
       (beta0 + beta1 * s + beta2 * v + beta3 * sv + 
       a * gamma0 + gamma1 * as + gamma2 * av + gamma3 * asv), 
       trace=TRUE, 
       start=list(alpha0=2/3, alpha1=0, alpha2=0, alpha3=0, 
          beta0=est[1], beta1=est[2], beta2=est[3],beta3=est[4], 
          gamma0=est[5],gamma1=est[6],gamma2=est[7],gamma3=est[8])) 

M <- maximum.oxygen.uptake m <- mass a <- age s <- sex v <- as.numeric(vigorous.exercise>0) sv <- s*v asv <- a*s*v as <- a*s av <- a*v lnm=log(m) lnms <- log(m)*s lnmv <- log(m)*v lnmsv <- log(m)*s*v y <- M/m^(2/3) 

は、私が正常に使用してnlsモデルを当てはめます問題:予測できない

xpredict <- seq(10,120,length.out=300) 
data1 <- data.frame(a=35,s=0,v=1,m=seq(10,120,length.out=300)) 
ypredict <- predict(nls.full, newdata=data1, type="response") 
plot(log(maximum.oxygen.uptake) ~ log(mass), subset = (s=='0' & v=='1')) 
lines(xpredict,ypredict) 

yとxの長さが異なります。

私は300変数を使って新しいデータフレームを定義しましたが、y予測では300個の結果しか得られません。

答えて

2

predictの使用に関する重要なケーススタディが追加されていますが、これは現在このサイトではわかっていません(私が知る限り)。したがって、通常通りに複製を終了しませんでした。


この単純な例では、あなたの問題が何であるかを説明するのに十分である:

fit1 <- nls(z ~ exp(a * x + b * x * y) + sin(c * y), 
      start = list(a = 3, b = 0, c = 1)) 

または

xy <- x * y  
fit2 <- nls(z ~ exp(a * x + b * xy) + sin(c * y), 
      start = list(a = 3, b = 0, c = 1)) 

set.seed(0) 
x <- runif(50) 
y <- runif(50) 
## true model 
z <- exp(4 * x - x * y) + sin(0.5 * y) + rnorm(50) 

我々はによって非線形回帰モデルを当てはめることができます

ただし、 g予測はpredictです。

newdat <- data.frame(x = runif(2), y = runif(2)) 
pred1 <- predict(fit1, newdat) 
# [1] 19.476569 2.870397 

pred2 <- predict(fit2, newdat) 
#[1] 12.205215 2.900922 16.675160 2.588310 18.466907 3.221744 21.207958 
#[8] 2.478375 16.294230 2.230084 22.675165 2.741694 22.053141 2.441442 
#[15] 20.378554 2.069649 20.362845 2.380586 10.570350 3.168567 11.477691 
#[22] 2.438041 19.336928 2.648129 22.282448 2.899636 16.264152 3.229857 
#[29] 19.928498 1.779721 16.563424 2.688125 14.925190 2.718176 21.853093 
#[36] 1.856641 20.213350 1.957830 22.960452 2.767944 21.890656 2.719899 
#[43] 22.370200 2.066384 14.061771 2.237771 12.102094 3.232742 18.985547 
#[50] 1.909355 

predict.nlspredict.lmpredict.glmが何をするかのような警告(Getting Warning: “ 'newdata' had 1 row but variables found have 32 rows” on predict.lm in R)を発行しません。基本的には、フィッティング式で使用されるすべての変数を指定する必要があります。 xyも変数であることに注意してください。

newdat$xy <- with(newdat, x * y) 
pred2 <- predict(fit2, newdat) 
# [1] 19.476569 2.870397 
関連する問題