Coleção modelos
GLS (erro correlacionado)
Ajusta mínimos quadrados generalizados (nlme::gls): AR(1), simetria composta ou não estruturada no erro, variância por nível.
O que o bloco faz
models/gls ajusta uma regressão ou ANOVA por mínimos quadrados generalizados (nlme::gls), com o erro correlacionado dentro de cada grupo: AR(1), AR(1) em tempo contínuo (car1, para ocasiões desigualmente espaçadas), simetria composta ou não estruturada. Opcionalmente, cada nível de uma coluna tem variância própria (varIdent). A saída é models/fit.
Antes de continuar
Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.
- Graus de liberdade
- Quantas informações independentes sobram para estimar uma variabilidade depois de estimados os outros parâmetros. Definem qual distribuição t, F ou qui-quadrado se usa no teste; com poucos graus de liberdade a inferência fica mais incerta.
- Verossimilhança
- O quanto um modelo, com certos valores de parâmetros, torna prováveis os dados observados. Estimar por máxima verossimilhança é escolher os parâmetros que maximizam essa medida; critérios como AIC e BIC partem dela.
- Variância
- A média dos quadrados das distâncias de cada valor à média: mede o quanto os dados se espalham. O desvio padrão é a raiz quadrada da variância e fica na mesma unidade dos dados.
- Resíduo
- A diferença entre o valor observado e o valor que o modelo ajustado prevê para aquela observação. É nos resíduos que se conferem os pressupostos do modelo: eles devem parecer ruído, sem padrão.
- Nível
- Cada valor que um fator assume no estudo: as doses 0, 50 e 100 kg/ha são três níveis do fator dose.
Quando usar
Em medidas repetidas no tempo: o mesmo animal, planta ou parcela medido várias vezes. A análise de parcela subdividida no tempo supõe esfericidade, que equivale a simetria composta. Com o GLS, essa estrutura vira uma escolha e pode ser comparada com outras.
Pressupostos
A relação entre a resposta e os preditores é a da fórmula (linear nos parâmetros, com as interações e curvaturas escritas).
Verificar:Diagnóstico dos resíduos
Se falhar: Acrescente termos (
poly(x, 2),a * b) ou transforme; teste o termo a mais com omodels/compare.Os grupos (animais, parcelas) são independentes entre si; a correlação só existe DENTRO do grupo, com a estrutura escolhida.
Verificar:Comparar modelos
Se falhar: Compare estruturas (AR(1), simetria composta, não estruturada) no
models/compare; a de menor AIC que ainda faz sentido.Com AR(1), as ocasiões são igualmente espaçadas e informadas em Tempo (ou as linhas estão na ordem do tempo): o AR(1) conta posições, não distância. Com Tempo numérico desigualmente espaçado, a nota do modelo avisa.
Se falhar: Use
correlacao = "car1"(AR(1) em tempo contínuo,corCAR1), que dá correlação phi^|t − s| na distância real.Os resíduos normalizados (descontada a correlação) são normais e de variância constante, salvo a variância por nível declarada.
A não estruturada estima uma correlação por par de ocasiões: pede muitos grupos para poucas ocasiões.
Os gl dos testes t e F dos coeficientes e do quadro são os do
nlme, n − p (número de observações menos parâmetros fixos): ignoram que a informação vem de poucos grupos e ficam liberais (p pequeno demais) com poucos sujeitos. As médias e comparações domodels/emmeansusam gl de Satterthwaite, menores, e por isso os dois podem discordar perto de 5%.Se falhar: Com poucos grupos (digamos menos de 20), confira o efeito no
models/emmeans/models/pairwise(Satterthwaite) ou ajuste o misto equivalente nomodels/lmer, que dá Satterthwaite ao quadro e aos coeficientes.
Configuração
Informe a fórmula dos efeitos fixos, a estrutura de correlação, o grupo (a unidade medida várias vezes) e, de preferência, o tempo, que ordena as ocasiões. Sem tempo, vale a ordem das linhas. Variância por é opcional.
Exemplo
library(trama)
reg <- tr_registry()
tr_use("trama.models", registry = reg)
tr_flow(reg) |>
tr_add("sono", "models/example", dataset = "sleepstudy") |>
tr_add("gls", "models/gls", formula = "Reaction ~ Days", correlacao = "ar1",
grupo = "Subject", tempo = "Days", from = "sono")No sleepstudy, o AR(1) estima phi = 0,80 entre dias consecutivos e uma inclinação de 10,47 ms por dia (EP 1,70). Com simetria composta, a correlação é 0,59 e o AIC sobe de 1747,2 para 1794,5: o AR(1) descreve melhor esses dados.
Como interpretar
Coeficientes e quadro são testes de Wald com gl n − p, do nlme: com poucos grupos esses gl são grandes demais e os p-valores, liberais; o models/emmeans usa Satterthwaite, e o misto equivalente no models/lmer também. O AR(1) conta posições (1, 2, 3…), não distância: com Tempo numérico desigualmente espaçado a nota avisa, e car1 usa a distância real. No tipo III (marginal), os fatores são reajustados em contraste de soma zero. Os resíduos do diagnóstico são os normalizados, já sem a correlação. Duas estruturas com o mesmo número de parâmetros (AR(1) e simetria composta) não são aninhadas: compare-as pelo AIC. Estruturas aninhadas (simetria composta dentro da não estruturada) vão ao models/compare. Validação: o bloco reproduz o nlme no Ovary (AR(1), phi 0,7532, logLik −780,7273), a igualdade entre simetria composta e o misto de intercepto aleatório, e o modelo não estruturado com variância por idade do Orthodont.
Implementação
nlme::gls()versão 3.1.168corAR1,corCAR1(no tempo),corCompSymmoucorSymmna posição dentro do grupo,varIdentpor nível; REML por padrão; testes de Wald com t e F nos gl n - p (liberais com poucos grupos; oemmeansusa Satterthwaite); comparação por razão de verossimilhança, reajustada por ML quando os fixos diferem.
No código O bloco chama trama.models::tr_models_gls(), em trama.models/R/ajustar.R:309.
A conta é feita nesta chamada:
nlme::gls(f, data = d, correlation = cor, weights = pesos, method = if (isTRUE(reml)) "REML" else "ML")
Outras funções de pacotes que o bloco usa (11)
stats::as.formula(texto)stats::complete.cases(d[, vars, drop = FALSE])stats::ave(seq_len(nrow(d)), d[[g]], FUN = seq_along)stats::as.formula(paste("~ .pos |", .tr_models_bt(g)))stats::as.formula(paste("~", .tr_models_bt(tp), "|", .tr_models_bt(g)))nlme::corAR1(form = fg)nlme::corCAR1(form = fc)nlme::corCompSymm(form = fg)nlme::corSymm(form = fg)nlme::varIdent(form = stats::as.formula(paste("~ 1 |", .tr_models_bt(vp))))stats::as.formula(paste("~ 1 |", .tr_models_bt(vp)))
Referências
Teoria
- Pinheiro, J. C.; Bates, D. M. (2000). Mixed-effects models in S and S-PLUS. Springer, New York. doi:10.1007/b98882