2 votos

lmer predice con efectos aleatorios y transformación logarítmica

Actualmente estoy tratando de construir un modelo de efectos mixtos utilizando el lme4 con el paquete incorporado lmer() función.

Mi objetivo es predecir el número de unidades vendidas en un sitio concreto en una fecha determinada en función de variables independientes como el precio de venta al público o las promociones.

Nota: Transformo el número de unidades vendidas en cada día en log(units) .

En este momento estoy revisando las previsiones de mi modelo mirando los gráficos. Mirando los gráficos generados he observado 2 cosas clave:

(1) Tengo la impresión de que la sigma del modelo no es la correcta.

(2) Tenía la impresión de que el modelo sólo tiene en cuenta los efectos fijos y descuida los efectos aleatorios que yo especifique.

Aquí están las líneas clave del código que supongo que son relevantes para mis preguntas:

d_data$units_as_log <- log(d_data$units+0.001) # Log Transformation of Units
#Specifying the model formula (very basic model)
model_vec <- c("units_as_log ~ retail_price + (1|article) + (1|site)")   
model <- lmer(model_vec[ii], 
    data=d_data[d_data$date <= endofhistory & d_data$AVAIL == 1,], REML=FALSE)
    # <= endofhistory describes the model interval
# > endofisthistory describes the holdout period, with re.form=NULL i try to include random effects
fcst <- exp(predict(model, newdata=subdata[subdata$date > endofhistory,], 
  re.form = NULL)+summary(model)$sigma^2/2) 
runMSE[ii] <- mean((fcst-actuals)^2, na.rm=TRUE)

Pregunta #1: ¿Es el sigma de summary(model) el sigma correcto o tengo que calcularlo yo mismo de alguna manera?

Anteriormente leí que la función sigma de lme4 fue trasladada al paquete stats.

Pregunta #2: ¿Es correcta la transformación de log_units a unidades con + resumen(modelo)$sigma^2/2?

Descubrí varios posts en StackExchange que daban respuestas diferentes, de ahí mi confusión aquí.

Pregunta 3: ¿Incluyo ya mis efectos aleatorios especificados? ¿Tengo que calcular yo mismo los resultados construyendo matrices personalizadas?

Anteriormente descubrí posts diciendo que lme4 no tiene la función predict() (estado de 2014). Sin embargo, he identificado que hay una función predict() en el paquete stats que puede tratar con objetos lmer, incluyendo efectos aleatorios con re.form = NULL.

2voto

Ben Bolker Puntos 8729

Ayudaría mucho tener un ejemplo reproducible, pero lo intentaré.

Pregunta #1: ¿Es el sigma de summary(model) el sigma correcto o tengo que calcularlo yo mismo de alguna manera?

Es correcto: sigma(model) y summary(model)$sigma son idénticos, el primero es un poco más compacto pero no diferente. (¿Por qué crees que es incorrecto?)

Anteriormente leí que la función sigma de lme4 se trasladó al paquete stats.

Esto sólo significa que sigma() se estableció como una función genérica en R base, por lo que la función genérica ya no está definida en el lme4 paquete. Pero sigma(fitted_model) sigue funcionando igual.

Pregunta #2: ¿Es correcta la transformación de log_units a unidades con + resumen(modelo)$sigma^2/2? (Descubrí varios posts en StackExchange que daban respuestas diferentes, de ahí mi confusión aquí).

¿Qué intenta hacer? Revertir tu transformación y=log(x+0.001) necesitas x=exp(y)-0.001 . La razón por la que la gente a veces añade en sigma^2/2 es porque el análisis en la escala transformada en logaritmos dará una estimación sesgada de la media (aritmética) en la escala original: véase por ejemplo aquí . Mi opinión es que no merece la pena hacerlo a no ser que estés interesado específicamente en predecir el media (en lugar de, por ejemplo, la mediana) en la escala original, pero conviene tenerlo en cuenta.

Pregunta 3: ¿Incluyo ya mis efectos aleatorios especificados? ¿Tengo que calcular yo mismo los resultados construyendo matrices personalizadas?

No debería ser necesario. En caso de duda, la documentación del versión actual del paquete que ha instalado ( ?predict.merMod ) da la respuesta autorizada. ¿Tiene alguna razón para creer que re.form=NULL no está haciendo lo que usted quiere? (Sugerencia: si tiene un modelo demasiado complejo, o muy pocos niveles en sus variables de agrupación, puede haber estimado varianzas de efectos aleatorios de cero, en cuyo caso parecerá que sus efectos aleatorios no están haciendo nada... compruebe VarCorr(fitted_model) y observe que las varianzas se estiman a veces como muy pequeñas (por ejemplo 1e-06 ) en lugar de exactamente cero...)

Tenga en cuenta que esta pregunta podría ser más apropiada para r-sig-mixed-models@r-project.org que el CrossValidated (ir a la página de información para suscribirse)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X