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.