2011-12-13 16 views
6
> age <- c(23,19,25,10,9,12,11,8) 
> steroid <- c(27.1,22.1,21.9,10.7,7.4,18.8,14.7,5.7) 
> sample <- data.frame(age,steroid) 
> fit2 <- lm(sample$steroid~poly(sample$age,2,raw=TRUE)) 
> fit2 

Call: 
lm(formula = sample$steroid ~ poly(sample$age, 2, raw = TRUE)) 

Coefficients: 
(Intercept)      -27.7225  
poly(sample$age, 2, raw = TRUE)1 5.1819 
poly(sample$age, 2, raw = TRUE)2 -0.1265 


> (newdata=data.frame(age=15)) 
age 
1 15 

> predict(fit2,newdata,interval="predict") 
    fit  lwr  upr 
1 24.558395 17.841337 31.27545 
2 25.077825 17.945550 32.21010 
3 22.781034 15.235782 30.32628 
4 11.449490 5.130638 17.76834 
5 8.670526 2.152853 15.18820 
6 16.248596 9.708411 22.78878 
7 13.975514 7.616779 20.33425 
8 5.638620 -1.398279 12.67552 
Warning message: 
'newdata' had 1 rows but variable(s) found have 8 rows 

Perché la funzione predict non è in grado di prevedere per età = 15?R: non è possibile prevedere un valore specifico

risposta

15

Invece di lm(data$y ~ data$x), utilizzare il modulo lm(y ~ x, data). Questo dovrebbe risolvere il tuo problema.

MODIFICA: il problema non riguarda solo la chiamata a lm, ma anche l'uso di poly(*, raw=TRUE). Se si rimuove il bit raw=TRUE, dovrebbe funzionare. Non sei sicuro del motivo per cui raw=TRUE si interrompe qui.

+0

Bel lavoro. (Ero dietro una specie di firewall che ha rotto il mio uso di StackOverflow per un po ', quindi non potevo rispondere ai tuoi commenti direttamente, né cancellare il mio post fino a poco tempo fa.) –