ANCOVA en R sugiere diferentes intercepciones, pero el IC del 95% se superpone ... ¿cómo es esto posible?

9

Tenemos un conjunto de datos con dos covariables y una variable de agrupación categórica y queremos saber si existen diferencias significativas entre la pendiente o la intercepción entre las covariables asociadas con las diferentes variables de agrupación. Hemos utilizado anova () y lm () para comparar los ajustes de tres modelos diferentes: 1) con una sola pendiente e intersección, 2) con diferentes intersecciones para cada grupo, y 3) con una pendiente y una intersección para cada grupo . De acuerdo con la prueba lineal general anova (), el segundo modelo es el más apropiado de los tres, hay una mejora significativa en el modelo al incluir una intercepción separada para cada grupo. Sin embargo, cuando observamos los intervalos de confianza del 95% para estas intercepciones, todas se superponen, lo que sugiere que no hay diferencias significativas entre las intercepciones. ¿Cómo se pueden conciliar estos dos resultados? Pensamos que otra forma de interpretar los resultados del método de selección de modelo era que debe haber al menos una diferencia significativa entre las intercepciones ... pero ¿tal vez esto no es correcto?

A continuación se muestra el código R para replicar este análisis. Hemos utilizado la función dput () para que pueda trabajar exactamente con los mismos datos con los que estamos lidiando.

# Begin R Script
# > dput(data)
structure(list(Head = c(1.92, 1.93, 1.79, 1.94, 1.91, 1.88, 1.91, 
1.9, 1.97, 1.97, 1.95, 1.93, 1.95, 2, 1.87, 1.88, 1.97, 1.88, 
1.89, 1.86, 1.86, 1.97, 2.02, 2.04, 1.9, 1.83, 1.95, 1.87, 1.93, 
1.94, 1.91, 1.96, 1.89, 1.87, 1.95, 1.86, 2.03, 1.88, 1.98, 1.97, 
1.86, 2.04, 1.86, 1.92, 1.98, 1.86, 1.83, 1.93, 1.9, 1.97, 1.92, 
2.04, 1.92, 1.9, 1.93, 1.96, 1.91, 2.01, 1.97, 1.96, 1.76, 1.84, 
1.92, 1.96, 1.87, 2.1, 2.17, 2.1, 2.11, 2.17, 2.12, 2.06, 2.06, 
2.1, 2.05, 2.07, 2.2, 2.14, 2.02, 2.08, 2.16, 2.11, 2.29, 2.08, 
2.04, 2.12, 2.02, 2.22, 2.22, 2.2, 2.26, 2.15, 2, 2.24, 2.18, 
2.07, 2.06, 2.18, 2.14, 2.13, 2.2, 2.1, 2.13, 2.15, 2.25, 2.14, 
2.07, 1.98, 2.16, 2.11, 2.21, 2.18, 2.13, 2.06, 2.21, 2.08, 1.88, 
1.81, 1.87, 1.88, 1.87, 1.79, 1.99, 1.87, 1.95, 1.91, 1.99, 1.85, 
2.03, 1.88, 1.88, 1.87, 1.85, 1.94, 1.98, 2.01, 1.82, 1.85, 1.75, 
1.95, 1.92, 1.91, 1.98, 1.92, 1.96, 1.9, 1.86, 1.97, 2.06, 1.86, 
1.91, 2.01, 1.73, 1.97, 1.94, 1.81, 1.86, 1.99, 1.96, 1.94, 1.85, 
1.91, 1.96, 1.9, 1.98, 1.89, 1.88, 1.95, 1.9, 1.94, NA, 1.84, 
1.83, 1.84, 1.96, 1.74, 1.91, 1.84, 1.88, 1.83, 1.93, 1.78, 1.88, 
1.93, 2.15, 2.16, 2.23, 2.09, 2.36, 2.31, 2.25, 2.29, 2.3, 2.04, 
2.22, 2.19, 2.25, 2.31, 2.3, 2.28, 2.25, 2.15, 2.29, 2.24, 2.34, 
2.2, 2.24, 2.17, 2.26, 2.18, 2.17, 2.34, 2.23, 2.36, 2.31, 2.13, 
2.2, 2.27, 2.27, 2.2, 2.34, 2.12, 2.26, 2.18, 2.31, 2.24, 2.26, 
2.15, 2.29, 2.14, 2.25, 2.31, 2.13, 2.09, 2.24, 2.26, 2.26, 2.21, 
2.25, 2.29, 2.15, 2.2, 2.18, 2.16, 2.14, 2.26, 2.22, 2.12, 2.12, 
2.16, 2.27, 2.17, 2.27, 2.17, 2.3, 2.25, 2.17, 2.27, 2.06, 2.13, 
2.11, 2.11, 1.97, 2.09, 2.06, 2.11, 2.09, 2.08, 2.17, 2.12, 2.13, 
1.99, 2.08, 2.01, 1.97, 1.97, 2.09, 1.94, 2.06, 2.09, 2.04, 2, 
2.14, 2.07, 1.98, 2, 2.19, 2.12, 2.06, 2, 2.02, 2.16, 2.1, 1.97, 
1.97, 2.1, 2.02, 1.99, 2.13, 2.05, 2.05, 2.16, 2.02, 2.02, 2.08, 
1.98, 2.04, 2.02, 2.07, 2.02, 2.02, 2.02), Site = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L), .Label = c("ANZ", "BC", "DV", "MC", 
"RB", "WW"), class = "factor"), Leg = c(2.38, 2.45, 2.22, 2.23, 
2.26, 2.32, 2.28, 2.17, 2.39, 2.27, 2.42, 2.33, 2.31, 2.32, 2.25, 
2.27, 2.38, 2.28, 2.33, 2.24, 2.21, 2.22, 2.42, 2.23, 2.36, 2.2, 
2.28, 2.23, 2.33, 2.35, 2.36, 2.26, 2.26, 2.3, 2.23, 2.31, 2.27, 
2.23, 2.37, 2.27, 2.26, 2.3, 2.33, 2.34, 2.27, 2.4, 2.22, 2.25, 
2.28, 2.33, 2.26, 2.32, 2.29, 2.31, 2.37, 2.24, 2.26, 2.36, 2.32, 
2.32, 2.15, 2.2, 2.29, 2.37, 2.26, 2.24, 2.23, 2.24, 2.26, 2.18, 
2.11, 2.23, 2.31, 2.25, 2.15, 2.3, 2.33, 2.35, 2.21, 2.36, 2.27, 
2.24, 2.35, 2.24, 2.33, 2.32, 2.24, 2.35, 2.36, 2.39, 2.28, 2.36, 
2.19, 2.27, 2.39, 2.23, 2.29, 2.32, 2.3, 2.32, NA, 2.25, 2.24, 
2.21, 2.37, 2.21, 2.21, 2.27, 2.27, 2.26, 2.19, 2.2, 2.25, 2.25, 
2.25, NA, 2.24, 2.17, 2.2, 2.2, 2.18, 2.14, 2.17, 2.27, 2.28, 
2.27, 2.29, 2.23, 2.25, 2.33, 2.22, 2.29, 2.19, 2.15, 2.24, 2.24, 
2.26, 2.25, 2.09, 2.27, 2.18, 2.2, 2.25, 2.24, 2.18, 2.3, 2.26, 
2.18, 2.27, 2.12, 2.18, 2.33, 2.13, 2.28, 2.23, 2.16, 2.2, 2.3, 
2.31, 2.18, 2.33, 2.29, 2.26, 2.21, 2.22, 2.27, 2.32, 2.24, 2.25, 
2.17, 2.2, 2.26, 2.27, 2.24, 2.25, 2.09, 2.25, 2.21, 2.24, 2.21, 
2.22, 2.13, 2.24, 2.21, 2.3, 2.34, 2.35, 2.32, 2.46, 2.43, 2.42, 
2.41, 2.32, 2.25, 2.33, 2.19, 2.45, 2.32, 2.4, 2.38, 2.35, 2.39, 
2.29, 2.35, 2.43, 2.29, 2.33, 2.31, 2.28, 2.38, 2.32, 2.43, 2.27, 
2.4, 2.37, 2.27, 2.41, 2.32, 2.38, 2.23, 2.33, 2.21, 2.34, 2.19, 
2.34, 2.35, 2.35, 2.31, 2.33, 2.41, 2.53, 2.39, 2.17, 2.16, 2.38, 
2.34, 2.33, 2.33, 2.29, 2.43, 2.28, 2.34, 2.38, 2.3, 2.29, 2.43, 
2.36, 2.24, 2.35, 2.38, 2.4, 2.36, 2.42, 2.28, 2.45, 2.33, 2.32, 
2.33, 2.31, 2.44, 2.37, 2.4, 2.35, 2.33, 2.31, 2.36, 2.43, 2.38, 
2.4, 2.38, 2.46, 2.33, 2.38, 2.23, 2.24, 2.39, 2.36, 2.19, 2.32, 
2.37, 2.39, 2.34, 2.39, 2.23, 2.25, 2.29, 2.39, 2.35, NA, 2.28, 
2.35, 2.38, 2.34, 2.17, 2.29, NA, 2.26, NA, NA, NA, 2.24, 2.33, 
2.23, 2.28, 2.29, 2.23, 2.2, 2.27, 2.31, 2.31, 2.26, 2.28)), .Names = c("Head", 
"Site", "Leg"), class = "data.frame", row.names = c(NA, -312L
)) 

# plot graph
library(ggplot2)

qplot(Head, Leg, 
    color=Site, 
    data=data) + 
        stat_smooth(method="lm", alpha=0.2) + 
        theme_bw()

ingrese la descripción de la imagen aquí

# create linear models
lm.1 <- lm(Leg ~ Head, data)
lm.2 <- lm(Leg ~ Head + Site, data)
lm.3 <- lm(Leg ~ Head*Site, data)

# evaluate linear models
anova(lm.1, lm.2, lm.3)
anova(lm.1, lm.2)

# > anova(lm.1, lm.2)
# Analysis of Variance Table
# Model 1: Leg.3.1 ~ Head.W1
# Model 2: Leg.3.1 ~ Head.W1 + Site
  # Res.Df     RSS Df Sum of Sq     F    Pr(>F)    
# 1    302 1.25589                                 
# 2    297 0.91332  5   0.34257 22.28 < 2.2e-16 ***


# examining the multiple-intercepts model (lm.2)
summary(lm.2)
coef(lm.2)
confint(lm.2)

# extracting the intercepts
intercepts <- coef(lm.2)[c(1, 3:7)]
intercepts.1 <- intercepts[1]
intercepts <- intercepts.1 + intercepts
intercepts[1] <- intercepts.1
intercepts

# extracting the confidence intervals
ci <- confint(lm.2)[c(1, 3:7),]
ci[2:6,] <- ci[2:6,] + confint(lm.2)[1,]
ci[,1]

# putting everything together in a dataframe
labels <- c("ANZ", "BC", "DV", "MC", "RB", "WW")
ci.dataframe <- data.frame(Site=labels, Intercept=intercepts, CI.low = ci[,1], CI.high = ci[,2])
ci.dataframe

# plotting intercepts and 95% CI
qplot(Site, Intercept, geom=c("point", "errorbar"), ymin=CI.low, ymax=CI.high, data=ci.dataframe, ylab="Intercept & 95% CI")

intercepta ancova

Solo para resumir: el problema es que los IC del 95% para las intersecciones se superponen, pero el método de selección de modelo sugiere que el mejor modelo es el que se ajusta a diferentes intersecciones. Por lo tanto, me inclino a pensar que nuestro método de selección de modelo es defectuoso o que los IC del 95% para las estimaciones de intercepción se calcularon incorrectamente. Cualquier idea sería muy apreciada!

James Waters
fuente
1
Su terminología estadística es confusa. Estás combinando medios grupales con "intercepciones". No es realmente un problema de codificación. Sugerir a los moderadores que se mueva a stats.exchange.
DWin

Respuestas:

11

Recuerde que la diferencia entre significativo y no significativo no es (siempre) estadísticamente significativo

Ahora, más al punto de su pregunta, el modelo 1 se llama regresión agrupada, y el modelo 2 regresión no agrupada. Como notó, en la regresión agrupada, asume que los grupos no son relevantes, lo que significa que la varianza entre los grupos se establece en cero.

En la regresión no agrupada, con una intersección por grupo, establece la varianza en infinito.

En general, preferiría una solución intermedia, que es un modelo jerárquico o una regresión agrupada parcial (o un estimador de contracción). Puede adaptar este modelo en R con el paquete lmer4.

Finalmente, eche un vistazo a este documento de Gelman , en el que argumenta por qué los modelos jerárquicos ayudan con los problemas de comparaciones múltiples (en su caso, ¿son diferentes los coeficientes por grupo? ¿Cómo corregimos un valor p para comparaciones múltiples)?

Por ejemplo, en tu caso,

library(lme4)
summary(lmer( leg ~ head + (1 | site)) # varying intercept model

Si desea ajustar una intersección variable, pendiente variable (el tercer modelo), simplemente ejecute

summary(lmer( leg ~ head + (1 | site) + (0+head|site) )) # varying intercept, varying-slope model

Luego puede echar un vistazo a la varianza del grupo y ver si es diferente de cero (la regresión agrupada no es el mejor modelo) y lejos del infinito (regresión no agrupada).

Actualización: después de los comentarios (ver más abajo), decidí ampliar mi respuesta.

El propósito de un modelo jerárquico, especialmente en casos como este, es modelar la variación por grupos (en este caso, Sitios). Entonces, en lugar de ejecutar un ANOVA para probar si un modelo es diferente de otro, miraría las predicciones de mi modelo y vería si las predicciones por grupo son mejores en los modelos jerárquicos frente a la regresión agrupada (regresión clásica) .

Ahora, ejecuté mis sugerencias arriba y foudn que

ranef(lmer( leg ~ head + (1 | site) + (0+head|site) )

Devolvería cero como estimaciones de pendiente variable (efecto variable de la cabeza por sitio). entonces corrí

ranef(lmer( leg ~ head + (head| site))

Y obtuve estimaciones distintas de cero para el efecto variable de la cabeza. Todavía no sé por qué sucedió esto, ya que es la primera vez que lo encuentro. Lamento mucho este problema, pero, en mi defensa, acabo de seguir la especificación descrita en la ayuda de la función lmer. (Vea el ejemplo con el estudio de sueño de datos). Trataré de entender lo que está sucediendo y reportaré aquí cuando (si) entiendo lo que está sucediendo.

Manoel Galdino
fuente
Gracias @ manoel-galdino - ¿Es correcto concluir de estos resultados que dado que la variación asociada con el sitio aquí no es sig? diferente de 0, entonces este factor no es significativo en el modelo? Random effects: Groups Name Variance Std.Dev. Site (Intercept) 0.0019094 0.043697 Residual 0.0030755 0.055457
James Waters
También @ manoel-galdino, ¿podría ayudarme a interpretar esta parte del modelo en inglés? (0+head|site)
James Waters
@JamesWaters, sí, dado que el sitio no es significativamente diferente de 0, la variación entre sitios no es tan importante.
Manoel Galdino
el (0 + cabeza | sitio) debe modelar el efecto de la cabeza que varía según el sitio (pendiente variable). Sin embargo, lo ejecuté y devolvió cero. No se porque. Si ejecuta simplemente reg <- lmer (Leg ~ Head + (Head | Site), data = mydata) obtendrá estimaciones de los efectos aleatorios. Use el comando ranef (reg) para imprimir los efectos aleatorios. Pero ampliaré mi respuesta ...
Manoel Galdino
3

Antes de cualquier intervención de moderador, puede mirar

library(car)

crPlots(lm.2,terms=~Site)

Estos son gráficos de componente + residual (residual parcial)

un componente + gráfico residual

BenBarnes
fuente
Gracias @BenBarnes, de esto puedo ver que el sitio RB tiene una intercepción bastante baja en comparación con BC. ¿Es el caso de que esta comparación no tiene que ser significativamente diferente para que el modelo que se ajusta a cada una de estas intersecciones sea significativamente mejor que el que se ajusta a una sola intersección?
James Waters
@James, la anova()comparación lm.1con lm.2realiza una prueba F ( en.wikipedia.org/wiki/F-test#Regression_problems ), que básicamente compara la reducción en la suma residual de cuadrados entre dos modelos anidados con la suma residual de cuadrados del modelo con más términos. Por lo tanto, no tiene en cuenta específicamente si los coeficientes de regresión individuales son estadísticamente significativos. Al igual que @Manoel, los documentos y libros de Andrew Gelman me parecen muy útiles, especialmente "Análisis de datos mediante regresión y modelos jerárquicos".
BenBarnes
3

Creo, entre otras cosas, que estás calculando mal los intervalos de confianza. Aquí hay dos formas de verlo:

(1) diferencias de cada sitio desde el sitio de línea de base (ANZ) [también puede calcular las diferencias de la media general cambiando a contrastes de suma a cero

library(coefplot2)  ## on r-forge
coefplot2(lm.2)

o (2) todas las comparaciones por pares (no me gusta este enfoque, pero es común):

library(multcomp)
ci <- confint(glht(lm.2, linfct = mcp(Site = "Tukey")))
ggplot(fortify(ci),aes(lhs,estimate,ymin=lwr,ymax=upr))+
    geom_pointrange()+theme_bw()+geom_hline(yintercept=0,col="red")
Ben Bolker
fuente
El enfoque del paquete multicomp dio este error:Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class 'c("confint.glht", "glht")' into a data.frame
James Waters
1

Tenga en cuenta que todos sus Headvalores están en el rango 1.7 - 2.4, mientras que las intersecciones intentan estimar el Legvalor en Head=0. Esta es una extrapolación importante, por lo que hay mucha incertidumbre. Si Headtuviera que centrar los valores y repetir este análisis, los intervalos de confianza serían mucho más estrictos.

Además, la superposición de intervalos de confianza del 95% no implica falta de diferencia estadísticamente significativa. De hecho, para dos grupos, los intervalos de confianza del 84% no superpuestos se aproximan y tienen diferencias significativas al nivel del 5%. Por supuesto, debido a las pruebas múltiples, esto no funciona con varios grupos.

Aniko
fuente
1

Además de las otras respuestas, aquí hay algunos enlaces de la Unidad de Consultoría Estadística de Cornell que son relevantes para la superposición de intervalos de confianza y sirven como un breve recordatorio de lo que significan y no significa

http://www.cscu.cornell.edu/news/statnews/stnews73.pdf http://www.cscu.cornell.edu/news/statnews/Stnews73insert.pdf

Aquí está el punto principal:

Si dos estadísticas tienen intervalos de confianza no superpuestos, son necesariamente significativamente diferentes, pero si tienen intervalos de confianza superpuestos, no es necesariamente cierto que no sean significativamente diferentes.

Aquí está el texto relevante del primer enlace:

Podemos ilustrar esto con un simple ejemplo. Supongamos que estamos interesados ​​en comparar medias de dos muestras independientes. La media de la primera muestra es 9 y la media de la segunda muestra es 17. Supongamos que las dos medias de grupo tienen los mismos errores estándar, igual a 2.5. El intervalo de confianza del 95 por ciento para la media del primer grupo se puede calcular como: ± × 5.296.19 donde 1.96 es el valor t crítico. El intervalo de confianza para la media del primer grupo es así (4.1, 13.9). De manera similar para el segundo grupo, el intervalo de confianza para la media es (12.1, 21.9). Observe que los dos intervalos se superponen. Sin embargo, la estadística t para comparar dos medias es:

t = (17-9)/√(2.5² + 2.5²) = 2.26

lo que refleja que la hipótesis nula, que las medias de los dos grupos son iguales, debe rechazarse en el nivel α = 0.05. Para verificar la conclusión anterior, considere el intervalo de confianza del 95 por ciento para la diferencia entre las dos medias de grupo: (17-9) ± 1.96 x √ (2.5² + 2.5²) que produce (1.09, 14.91). El intervalo no contiene cero, por lo tanto, rechazamos la hipótesis nula de que las medias grupales son las mismas.

En general, cuando se comparan estimaciones de dos parámetros, siempre es cierto que si los intervalos de confianza no se superponen, las estadísticas serán estadísticamente significativamente diferentes. Sin embargo, lo contrario no es cierto. Es decir, es erróneo determinar la significancia estadística de la diferencia entre dos estadísticas basadas en intervalos de confianza superpuestos. Para obtener una explicación de por qué esto es cierto para el caso de la comparación de medias de dos muestras, consulte el siguiente enlace: http://www.cscu.cornell.edu/news/statnews/Stnews73insert.pdf

Aquí está la información del otro enlace:

ingrese la descripción de la imagen aquí

Jota
fuente