2012-09-22 18 views
14

Por lo tanto, actualmente estoy tratando de dibujar el intervalo de confianza para un modelo lineal. Descubrí que debería usar predict.lm() para esto, pero tengo algunos problemas para entender realmente la función y no me gusta usar funciones sin saber qué está sucediendo. Encontré varias instrucciones sobre este tema, pero solo con el código R correspondiente, sin una explicación real. Esta es la función propia:Predict.lm() en R: cómo obtener bandas de predicción no constantes alrededor de los valores ajustados

## S3 method for class 'lm' 
predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf, 
     interval = c("none", "confidence", "prediction"), 
     level = 0.95, type = c("response", "terms"), 
     terms = NULL, na.action = na.pass, 
     pred.var = res.var/weights, weights = 1, ...) 

Ahora, lo que tengo problemas para comprender:

1) newdata 
    An optional data frame in which to look for variables 
    with which to predict. If omitted, the fitted values are used. 
  • Todo el mundo parece utilizar NewData para esto, pero no acabo de entender por qué. Para calcular el intervalo de confianza, obviamente necesito los datos para los cuales este intervalo es (como el número de observaciones, la media de x, etc.), así que no puede ser lo que significa. Pero luego: ¿qué significa?

    2) interval
    Type of interval calculation.

  • bien .. pero lo que es "ninguna" para?

    3a) type
    Type of prediction (response or model term).

    3b) terms
    If type="terms", which terms (default is all terms)

  • 3a: ¿Puedo conseguir por que el intervalo de confianza para una variable específica en mi modelo? Y si es así, ¿para qué es 3b entonces? Si puedo especificar el término en 3a, no tendría sentido hacerlo nuevamente en 3b ... así que supongo que estoy equivocado nuevamente, pero no puedo entender por qué.

Supongo que algunos de ustedes pensarán: ¿Por qué no prueban esto? Y lo haría (incluso si tal vez no resolviera todo aquí), pero ahora mismo no sé cómo hacerlo. Como ahora no sé para qué son los newdata, no sé cómo usarlo y si lo intento, no obtengo el intervalo de confianza correcto. De alguna manera, es muy importante cómo eliges esa información, ¡pero simplemente no entiendo!

EDITAR: Quiero añadir que mi intención es entender cómo funciona predict.lm. Con eso quiero decir que no entiendo si funciona de la forma en que creo. Es decir, calcula y-hat (valores pronosticados) y utiliza agrega/resta para cada uno de los límites upr/lwr del intervalo para calcular varios puntos de datos (que parecen una línea de confianza). Entonces entendería por qué es necesario tener la misma longitud en los nuevos datos que en el modelo lineal.

+0

La sección de Detalles de la documentación discute el argumento 'newdata' con cierta extensión. ¿Qué parte de esa discusión sigue siendo confusa? – joran

+0

Supongo que esto es lo que me confunde: "predicción.lm produce valores pronosticados, obtenidos al evaluar la función de regresión en el cuadro datos nuevos" (en la explicación general) y "Si se omite newdata, las predicciones se basan en los datos utilizados para la ajuste." para newdata. ¿Por qué trataría de obtener intervalos de confianza que no están conectados en mi regresión real? Así es como entiendo esta oración, así que esto es lo que me confunde. Luego explica cómo se manejan los valores perdidos en ese caso, ¡pero ya lucho con la primera parte! – lisa

+2

Puede que le interesen los intervalos _prediction_ para nuevas observaciones. – joran

Respuesta

21

recuperar algo de datos:

d <- data.frame(x=c(1,4,5,7), 
       y=c(0.8,4.2,4.7,8)) 

ajustar el modelo:

lm1 <- lm(y~x,data=d) 

de confianza y predicción intervalos con los valores de x originales:

p_conf1 <- predict(lm1,interval="confidence") 
p_pred1 <- predict(lm1,interval="prediction") 

Conf. y pred.intervalos con nuevos valores de x (extrapolación y más finamente/uniformemente espaciados que datos originales):

nd <- data.frame(x=seq(0,8,length=51)) 
p_conf2 <- predict(lm1,interval="confidence",newdata=nd) 
p_pred2 <- predict(lm1,interval="prediction",newdata=nd) 

Trazado todo juntos:

par(las=1,bty="l") ## cosmetics 
plot(y~x,data=d,ylim=c(-5,12),xlim=c(0,8)) ## data 
abline(lm1) ## fit 
matlines(d$x,p_conf1[,c("lwr","upr")],col=2,lty=1,type="b",pch="+") 
matlines(d$x,p_pred1[,c("lwr","upr")],col=2,lty=2,type="b",pch=1) 
matlines(nd$x,p_conf2[,c("lwr","upr")],col=4,lty=1,type="b",pch="+") 
matlines(nd$x,p_pred2[,c("lwr","upr")],col=4,lty=2,type="b",pch=1) 

enter image description here

Usando nuevos datos permite la extrapolación más allá del original datos; Además, si los datos originales están espaciados escasa o desigualmente, los intervalos de predicción (que no son líneas rectas) pueden no aproximarse bien por interpolación lineal entre los valores x originales ...

No estoy muy seguro de lo que significa por el "intervalo de confianza para una variable específica en mi modelo"; si desea intervalos de confianza en un parámetro , debe usar confint. Si desea que las predicciones de los cambios se basen solo en algunos de los parámetros que cambian (ignorando la incertidumbre debida a los otros parámetros), entonces sí desea utilizar type="terms".

interval="none" (valor predeterminado) simplemente le dice a R que no se moleste en calcular los intervalos de confianza o de predicción, y que devuelva solo los valores predichos.

+0

¿Puede tratar de explicar la diferencia entre una predicción y un intervalo de confianza en pocas palabras? Así es como lo entendí: CI te da una pista sobre dónde es probable que la media de la población utilizada caiga en el 95% de los casos. Por otro lado, el PI no se trata de la media, sino de los valores futuros, estos son los valores y que aún no figuran en sus datos. ¿Es esto de alguna manera correcto? – lisa

+2

¿Puedo sugerirle que google '"intervalo de predicción" "intervalo de confianza"' ...? las respuestas están por ahí ... si no obtienes lo que necesitas allí, entonces probablemente deberías preguntar en http://stats.stackexchange.com, ya que hemos ido más allá del ámbito de la programación ... también: http : //stackoverflow.com/questions/9406139/r-programming-predict-prediction-vs-confidence –

+0

Sí, lo he leído, gracias de todos modos – lisa

Cuestiones relacionadas