Con el siguiente conjunto de datos, quería ver si la respuesta (efecto) cambia con respecto a los sitios, la temporada, la duración y sus interacciones. Algunos foros en línea sobre estadísticas me sugirieron que siguiera con los Modelos lineales de efectos mixtos, pero el problema es que, dado que las réplicas son aleatorias dentro de cada estación, tengo pocas posibilidades de recolectar la muestra exactamente del mismo lugar en temporadas sucesivas (por ejemplo, repl-1 de s1 de post-monzón puede no ser el mismo que el de monzón). Es diferente a los ensayos clínicos (con diseño dentro del sujeto) donde se mide el mismo sujeto repetidamente durante las estaciones. Sin embargo, considerando los sitios y la temporada como un factor aleatorio, ejecuté los siguientes comandos y recibí un mensaje de advertencia:
Warning messages:
1: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv,
: unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv,
: Model failed to converge: degenerate Hessian with 1 negative eigenvalues
¿Alguien puede ayudarme a resolver el problema? Los códigos se dan a continuación:
library(lme4)
read.table(textConnection("duration season sites effect
4d mon s1 7305.91
4d mon s2 856.297
4d mon s3 649.93
4d mon s1 10121.62
4d mon s2 5137.85
4d mon s3 3059.89
4d mon s1 5384.3
4d mon s2 5014.66
4d mon s3 3378.15
4d post s1 6475.53
4d post s2 2923.15
4d post s3 554.05
4d post s1 7590.8
4d post s2 3888.01
4d post s3 600.07
4d post s1 6717.63
4d post s2 1542.93
4d post s3 1001.4
4d pre s1 9290.84
4d pre s2 2199.05
4d pre s3 1149.99
4d pre s1 5864.29
4d pre s2 4847.92
4d pre s3 4172.71
4d pre s1 8419.88
4d pre s2 685.18
4d pre s3 4133.15
7d mon s1 11129.86
7d mon s2 1492.36
7d mon s3 1375
7d mon s1 10927.16
7d mon s2 8131.14
7d mon s3 9610.08
7d mon s1 13732.55
7d mon s2 13314.01
7d mon s3 4075.65
7d post s1 11770.79
7d post s2 4254.88
7d post s3 753.2
7d post s1 11324.95
7d post s2 5133.76
7d post s3 2156.2
7d post s1 12103.76
7d post s2 3143.72
7d post s3 2603.23
7d pre s1 13928.88
7d pre s2 3208.28
7d pre s3 8015.04
7d pre s1 11851.47
7d pre s2 6815.31
7d pre s3 8478.77
7d pre s1 13600.48
7d pre s2 1219.46
7d pre s3 6987.5
"),header=T)->dat1
m1 = lmer(effect ~ duration + (1+duration|sites) +(1+duration|season),
data=dat1, REML=FALSE)
fuente
Respuestas:
"Resolver" el problema que experimenta en el sentido de no recibir advertencias sobre convergencia fallida es bastante sencillo: no utiliza el optimizador BOBYQA predeterminado, sino que opta por utilizar la rutina de optimización Nelder-Mead utilizada de forma predeterminada en
1.0.x
versiones anteriores anteriores. O instale el paqueteoptimx
para poder directamente una rutina L-BFGS-B onlminb
(igual que laslme4
versiones anteriores a la ver.1
). Por ejemplo:todo funciona bien (sin advertencias). Las preguntas interesantes son:
REML = TRUE
no recibiste advertencias?De manera sucinta, 1. recibió esas advertencias porque definió
duration
tanto un efecto fijo como una pendiente aleatoria para el factorsites
y tambiénseason
. El modelo efectivamente agotó los grados de libertad para estimar las correlaciones entre las pendientes y las intersecciones que definió. Si utilizó un modelo marginalmente más simple como:no experimentaría problemas de convergencia. Este modelo efectivamente estimaría intercepciones aleatorias no correlacionadas y pendientes aleatorias para cada una
season
.REML = FALSE
Una nota final es que no estoy seguro de si tiene sentido usar
season
como efecto aleatorio para empezar. Después de todo, solo hay tantas estaciones, por lo que también podría tratarlas como efectos fijos.fuente
REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))
- en realidad resolvió el problema de convergencia englmer
!La pregunta es estadística más que técnica. En realidad, utilicé un modelo de efectos aleatorios en lugar de uno de efectos fijos. Creo que ninguno de los factores debe tratarse como factor aleatorio, ya que necesitamos al menos 5 o 6 niveles o réplicas para tratar un factor como efecto aleatorio (ver aquí ¿Cuál es el número mínimo recomendado de grupos para un factor de efectos aleatorios? ).
El conjunto de datos anterior contiene solo muestras por triplicado / sitio / temporada, lo que es insuficiente para un modelo de efectos aleatorios. En el conjunto de datos, la duración, 4 días y 7 días, pertenecen a dos experimentos paralelos separados realizados al mismo tiempo. Entonces, dividir el conjunto de datos por duración (4 días y 7 días) y realizar una anova de 2 vías para cada duración con la temporada y los sitios, ya que los factores serían suficientes para modelar el efecto (variable de respuesta) aquí. El modelo debe ser el siguiente:
Gracias a Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) y a @ usεr11852 que me ayudaron a resolver el problema.
fuente