¿Cómo calcula ggplot los intervalos de confianza para las regresiones?

15

El paquete de trazado R ggplot2 tiene una función asombrosa llamada stat_smooth para trazar una línea (o curva) de regresión con la banda de confianza asociada.

Sin embargo, estoy teniendo dificultades para averiguar exactamente cómo se genera esta banda de confianza, para cada línea de regresión (o "método"). ¿Cómo puedo encontrar esta información?

static_rtti
fuente
2
Consulte la sección titulada "Detalles" en su enlace.
Stéphane Laurent
1
@ StéphaneLaurent: He leído esa sección, pero todavía tengo problemas para conectar los puntos. Utilizo el método "rlm" para ajustar una línea, ¿cómo se calcula el intervalo de confianza (matemáticamente, qué ecuación / algoritmo?)? ¿Cómo puedo encontrar esa información?
static_rtti
1
Así que creo que deberías hacer una pregunta más precisa.
Stéphane Laurent
1
Creo que su pregunta es razonablemente precisa ... pero sospecho que no obtendrá una respuesta aquí. Puede tener mejor suerte en el grupo de ggplot2 google: groups.google.com/forum/?fromgroups#!forum/ggplot2
russellpierce

Respuestas:

22

De la Detailssección de la ayuda

El cálculo se realiza mediante la función genérica predictdf (actualmente no documentada) y sus métodos. Para la mayoría de los métodos, los límites de confianza se calculan utilizando el método de predicción: las excepciones son loess, que utiliza una aproximación basada en t, y para glm, donde el intervalo de confianza normal se construye en la escala del enlace y luego se transforma a la escala de respuesta.

Entonces predictdf generalmente llamará stats::predict, lo que a su vez llamará al predictmétodo correcto para el método de suavizado. Otras funciones que involucran stat_smooth también son útiles para considerar.

La mayoría de las funciones de ajuste del modelo tendrán un predictmétodo asociado con el classdel modelo. Por lo general, tomarán un newdataobjeto y un argumento se.fitque indicará si se ajustarán los errores estándar. (ver ?predict) para más detalles.

se
mostrar intervalo de confianza alrededor suave? (VERDADERO por defecto, ver nivel para controlar

Esto se pasa directamente al método de predicción para devolver los errores estándar apropiados (según el método)

fullrange
si el ajuste abarca el rango completo de la trama, o solo los datos

Esto define los newdatavalores para los xcuales se evaluarán las predicciones

level nivel de intervalo de confianza a utilizar (0,95 por defecto)

Se pasa directamente al método de predicción para que el intervalo de confianza pueda definir el valor crítico apropiado (p. Ej., Los predict.lmusos qt((1 - level)/2, df)para los errores estándar se multiplicarán por

n número de puntos para evaluar más suave en

Se utiliza junto con fullrangepara definir los xvalores en elnewdata objeto.

Dentro de una llamada a stat_smoothusted puede definir sequé es lo que coincide parcialmente con se.fit(o se), y definirá el intervalargumento si es necesario.leveldará el nivel del intervalo de confianza (por defecto 0,95).

El newdataobjeto se define dentro del procesamiento, dependiendo de su configuración de fullrangeuna secuencia de longitudn dentro del rango completo de la trama o los datos.

En su caso, usando rlm, esto usará predict.rlm, que se define como

predict.rlm <- function (object, newdata = NULL, scale = NULL, ...)
{
    ## problems with using predict.lm are the scale and
    ## the QR decomp which has been done on down-weighted values.
    object$qr <- qr(sqrt(object$weights) * object$x)
        predict.lm(object, newdata = newdata, scale = object$s, ...)
}

Por lo tanto, está llamando internamente predict.lmcon una escala adecuada de la qrdescomposición y el scaleargumento.

mnel
fuente
... y predict.rlm está oculto dentro de MASS ... y la llamada a predictdf pasa argumentos modelo, xseq, se y level a predict.rlm ... pero ¿de dónde provienen esos valores? Bueno, supongo que eso depende de lo que sucede cuando se pasan argumentos de stat_smooth a StatSmooth $ nueva ... que luego a su vez en las llamadas ...
russellpierce
1
Mi punto es que su respuesta es un paso en la dirección correcta, pero responder la pregunta de los OP por completo no es tan trivial como parece al principio (aunque uno espera que el código se comporte con sensatez ... uno no está seguro a menos que uno lo rastree por completo) )
russellpierce
2
Uno espera que el código se comporte de manera sensata, si el predictmétodo se ha configurado de manera estándar. Edité mi respuesta para abordar los problemas planteados en su primer comentario.
mnel
@mnel: muchas gracias por esta respuesta muy detallada y útil!
static_rtti