A ANCOVA em R sugere interceptações diferentes, mas os ICs de 95% se sobrepõem ... como isso é possível?

9

Temos um conjunto de dados com duas covariáveis ​​e uma variável de agrupamento categórica e queremos saber se existem diferenças significativas entre a inclinação ou a interceptação entre as covariáveis ​​associadas às diferentes variáveis ​​de agrupamento. Usamos anova () e lm () para comparar os ajustes de três modelos diferentes: 1) com uma única inclinação e interceptação, 2) com diferentes interceptações para cada grupo e 3) com uma inclinação e uma interceptação para cada grupo . De acordo com o teste linear geral anova (), o segundo modelo é o mais apropriado dos três; há uma melhoria significativa no modelo, incluindo uma interceptação separada para cada grupo. No entanto, quando analisamos os intervalos de confiança de 95% para essas interceptações - todos se sobrepõem, sugerindo que não há diferenças significativas entre as interceptações. Como esses dois resultados podem ser reconciliados? Pensamos que outra maneira de interpretar os resultados do método de seleção de modelos era que deveria haver pelo menos uma diferença significativa entre as interceptações ... mas talvez isso não esteja correto?

Abaixo está o código R para replicar essa análise. Usamos a função dput () para que você possa trabalhar exatamente com os mesmos dados com os quais estamos lidando.

# 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()

insira a descrição da imagem aqui

# 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")

ancova intercepta

Apenas para resumir - o problema é que os ICs de 95% para as interceptações se sobrepõem, mas o método de seleção de modelo sugere que o melhor modelo é aquele que se encaixa em interceptações diferentes. Portanto, estou inclinado a pensar que nosso método de seleção de modelos é defeituoso ou que os ICs de 95% das estimativas de interceptação foram calculados incorretamente. Qualquer pensamento seria muito apreciado!

James Waters
fonte
1
Sua terminologia estatística está confusa. Você está combinando meios de grupo com "intercepta". Não é realmente um problema de codificação. Sugerindo aos moderadores que sejam movidos para stats.exchange.
Dwin

Respostas:

11

Lembre-se de que a diferença entre significativo e não significativo não é (sempre) estatisticamente significativa

Agora, mais ao ponto de sua pergunta, o modelo 1 é chamado de regressão agrupada e o modelo 2 regressão não agrupada. Como você observou, na regressão agrupada, você assume que os grupos não são relevantes, o que significa que a variação entre os grupos é definida como zero.

Na regressão não agrupada, com uma interceptação por grupo, você define a variação como infinito.

Em geral, eu preferiria uma solução intermediária, que é um modelo hierárquico ou regressão agrupada parcial (ou estimador de retração). Você pode ajustar esse modelo no R com o pacote lmer4.

Finalmente, dê uma olhada neste artigo de Gelman , no qual ele argumenta por que os modelos hierárquicos ajudam nos problemas de múltiplas comparações (no seu caso, os coeficientes por grupo são diferentes? Como podemos corrigir um valor-p para comparações múltiplas).

Por exemplo, no seu caso,

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

Se você deseja ajustar uma interceptação variável, uma inclinação variável (o terceiro modelo), basta executar

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

Depois, você pode dar uma olhada na variação do grupo e verificar se ela é diferente de zero (a regressão agrupada não é o melhor modelo) e longe do infinito (regressão não agrupada).

update: Após os comentários (veja abaixo), decidi expandir minha resposta.

O objetivo de um modelo hierárquico, especialmente em casos como esse, é modelar a variação por grupos (neste caso, Sites). Portanto, em vez de executar uma ANOVA para testar se um modelo é diferente de outro, eu daria uma olhada nas previsões do meu modelo e veria se as previsões por grupo são melhores nos modelos hierárquicos versus na regressão agrupada (regressão clássica) .

Agora, corri minhas sugestões acima e descobri que

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

Retornaria zero como estimativas de inclinação variável (efeito variável da cabeça por local). então eu corri

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

E eu tenho estimativas diferentes de zero para o efeito variável da cabeça. Ainda não sei por que isso aconteceu, já que foi a primeira vez que encontrei isso. Sinto muito por esse problema, mas, em minha defesa, apenas segui a especificação descrita na ajuda da função lmer. (Veja o exemplo no estudo de suspensão de dados). Vou tentar entender o que está acontecendo e relatarei aqui quando (se) entender o que está acontecendo.

Manoel Galdino
fonte
Obrigado @ manoel-galdino - É correto concluir a partir desses resultados que, uma vez que a variação associada ao Site aqui não é sig. diferente de 0, então esse fator não é significativo no modelo? Random effects: Groups Name Variance Std.Dev. Site (Intercept) 0.0019094 0.043697 Residual 0.0030755 0.055457
James Waters
@ Manoel-galdino também, você poderia me ajudar a interpretar essa parte do modelo em inglês? (0+head|site)
James Waters
@JamesWaters, sim, como o site não é significativamente diferente de 0, a variação entre sites não é tão importante.
Manoel Galdino
o (0 + cabeçalho | local) deve modelar o efeito da cabeça variando por local (inclinação variável). No entanto, eu executei e retornou zero. Não sei porque. Se você executar simplesmente reg <--mer (Leg ~ Head + (Head | Site), data = mydata), obterá estimativas para os efeitos aleatórios. Use o comando ranef (reg) para imprimir os efeitos aleatórios. Mas eu vou expandir minha resposta ...
Manoel Galdino
3

Antes de qualquer intervenção do moderador, você pode olhar

library(car)

crPlots(lm.2,terms=~Site)

Estes são gráficos de componentes + residuais (residuais parciais)

um componente + plot residual

BenBarnes
fonte
Obrigado @BenBarnes, a partir disso eu posso ver que o site RB tem um intercepto bastante baixo comparado ao BC. Será que essa comparação não precisa ser significativamente diferente para que o modelo que se encaixa em cada uma dessas interceptações seja significativamente melhor do que aquele que se encaixa em uma única interceptação?
James Waters
@ James, a anova()comparação lm.1com lm.2realiza um teste F ( en.wikipedia.org/wiki/F-test#Regression_problems ), que basicamente compara a redução na soma residual de quadrados entre dois modelos aninhados à soma residual de quadrados do modelo com mais termos. Portanto, não leva especificamente em consideração se os coeficientes de regressão individuais são estatisticamente significativos. Como o @Manoel, acho os artigos e livros de Andrew Gelman muito úteis, especialmente "Análise de Dados Utilizando Regressão e Modelos Hierárquicos".
Ben Barnes
3

Eu acho, entre outras coisas, que você está calculando os intervalos de confiança errados. Aqui estão duas maneiras de ver isso:

(1) diferenças de cada site em relação ao site da linha de base (ANZ) [você também pode calcular diferenças da média geral alterando para contrastes de soma e zero

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

ou (2) todas as comparações pareadas (não gosto dessa abordagem, mas é comum):

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
fonte
A abordagem pacote multcomp deu esse erro: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

Observe que todos os seus Headvalores estão no intervalo de 1,7 a 2,4, enquanto as intercepções estão tentando estimar o Legvalor em Head=0. Esta é uma grande extrapolação, por isso há muita incerteza. Se você centralizar os Headvalores e repetir essa análise, os intervalos de confiança ficarão muito mais apertados.

Além disso, a sobreposição de intervalos de confiança de 95% não implica falta de diferença estatisticamente significante. De fato, para dois grupos, os intervalos de confiança de 84% não sobrepostos aproximam-se das diferenças significativas no nível de 5%. Obviamente, devido a vários testes, isso não funciona muito bem com vários grupos.

Aniko
fonte
1

Além das outras respostas, aqui estão alguns links da Unidade de Consultoria Estatística da Cornell que são relevantes para a sobreposição de intervalos de confiança e servem como um lembrete curto e bom do que eles fazem e não significam

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

Aqui está o ponto principal:

Se duas estatísticas têm intervalos de confiança não sobrepostos, eles são necessariamente significativamente diferentes, mas se eles têm intervalos de confiança sobrepostos, não é necessariamente verdade que eles não são significativamente diferentes.

Aqui está o texto relevante do primeiro link:

Podemos ilustrar isso com um exemplo simples. Suponha que estamos interessados ​​em comparar médias de duas amostras independentes. A média da primeira amostra é 9 e a média da segunda amostra é 17. Vamos supor que as duas médias do grupo tenham os mesmos erros padrão, iguais a 2,5. O intervalo de confiança de 95% para a média do primeiro grupo pode ser calculado como: ± × 5.296,19 em que 1,96 é o valor t crítico. O intervalo de confiança para a média do primeiro grupo é assim (4.1, 13,9). Da mesma forma, para o segundo grupo, o intervalo de confiança para a média é (12,1, 21,9). Observe que os dois intervalos se sobrepõem. No entanto, a estatística t para comparar duas médias é:

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

o que reflete que a hipótese nula, de que as médias dos dois grupos são iguais, deve ser rejeitada no nível α = 0,05. Para verificar a conclusão acima, considere o intervalo de confiança de 95% para a diferença entre as duas médias do grupo: (17-9) ± 1,96 x √ (2,5² + 2,5²) que produz (1,09, 14,91). O intervalo não contém zero, portanto rejeitamos a hipótese nula de que o grupo significa que são os mesmos.

Geralmente, ao comparar duas estimativas de parâmetros, é sempre verdade que, se os intervalos de confiança não se sobrepuserem, as estatísticas serão estatisticamente significativamente diferentes. No entanto, o inverso não é verdadeiro. Ou seja, é incorreto determinar a significância estatística da diferença entre duas estatísticas com base em intervalos de confiança sobrepostos. Para uma explicação de por que isso é verdade no caso de comparação de médias de duas amostras, consulte o seguinte link: http://www.cscu.cornell.edu/news/statnews/Stnews73insert.pdf

Aqui estão as informações do outro link:

insira a descrição da imagem aqui

Jota
fonte