es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tramas de resultados de modelo predictivo para modelos promediados (lm, glm o glmm)

Utilicé MuMIn::model.avg para promediar varios modelos y estoy interesado en trazar los resultados esperados del promedio del modelo condicional (no completo). Probé tanto ggeffects::ggpredict como sjPlot::plot_model, pero ambos solo muestran los resultados del modelo completo.
Puedo obtener las estimaciones esperadas utilizando predict(), que tiene una opción para elegir si utilizar el modelo completo o condicional (usando full = False para el condicional). Pero si especifico se.fit = True para obtener el error estándar, entonces recibo una advertencia que dice ‘se ignora el argumento ‘full’‘, y predice los resultados del modelo completo. También intenté usar emmeans siguiendo esta respuesta, pero también utiliza el modelo completo.

*El mismo problema se produce tanto con modelos lineales simples (lm) como con modelos generalizados (glm).

¿Existe alguna forma de obtener los resultados esperados de un modelo promedio condicional y su error estándar o intervalo de confianza? ¿O incluso mejor, una forma de representarlos gráficamente?

No estoy seguro si mi problema es un problema estadístico (es decir, no se puede hacer estadísticamente) o un problema de R. Espero que sea lo segundo, pero agradeceré una explicación si es lo primero.

No he agregado datos porque no creo que sean relevantes, pero puedo hacerlo si es necesario. Todas las variables explicativas son factores (como se puede ver en mi dataframe NewData).

Aquí están las pocas líneas de código que probé:

m1 <- lm(A ~ B*C + d, data=df, na.action=”na.fail”)
dd1 <- dredge(m1, subset=Origin)
m1.avg <- model.avg(dd1, fit=TRUE)
plot_model(m1.avg, type=”pred”, terms=c(“B”, “C”, “d”))

NewData <- data.frame(B=c(rep(c(“b1”, “b2”), 6)),
D=c(rep(“d1”, 6), rep(“d2”, 6)),
C=c(rep(c(“C1”, “C1”, “C3”, “C3”, “C5”, “C5”), 2)))
cbind(NewData, pre=predict(m1.avg, newdata=NewData, full=F, se.fit=T))

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema aquí no está en el enfoque estadístico, sino en la implementación de los paquetes de R. Tanto ggeffects::ggpredict como sjPlot::plot_model solo proporcionan resultados para el modelo completo, y la función predict() con se.fit = T ignora el argumento full y también proporciona resultados para el modelo completo.

    Una posible solución es utilizar el paquete emmeans para extraer las medias marginales estimadas para el modelo condicional, y calcular los errores estándar manualmente utilizando el error estándar de los valores pronosticados y la desviación estándar de las intercepciones de los modelos condicionales. Aquí tienes un código de ejemplo:

    library(MuMIn)
    library(emmeans)
    
    m1 <- lm(A ~ B*C + d, data=df, na.action="na.fail")
    dd1 <- dredge(m1, subset=Origin)
    m1.avg <- model.avg(dd1, fit=TRUE)
    
    # Crear nuevos datos
    NewData <- expand.grid(B=c("b1", "b2"), 
                           D=c("d1", "d2"), 
                           C=c("C1", "C3", "C5"))
    
    # Extraer medias marginales estimadas utilizando emmeans
    emm <- emmeans(m1, ~ B*C*d, subset=Origin, type="response", at=NewData)
    
    # Calcular errores estándar utilizando valores pronosticados y desviación estándar de las intercepciones
    pred <- predict(m1.avg, newdata=NewData, full=F)
    sd_int <- sd(coef(model.se(m1, subset=Origin))[, "cond"])
    se_pred <- pred$se.fit * sqrt(1 + 1/length(levels(NewData$C)))
    se <- sd_int * se_pred
    
    # Combinar resultados en un marco de datos (data frame)
    res <- cbind(NewData, pre=pred$fit, se=se)
    
    # Opcional: graficar resultados
    library(ggplot2)
    ggplot(res, aes(x=C, y=pre, fill=B)) +
      geom_bar(stat="identity", position=position_dodge()) +
      geom_errorbar(aes(ymin=pre-se, ymax=pre+se), 
                    position=position_dodge(width=0.9), width=0.2) +
      facet_wrap(~D)
    

    Esto debería proporcionar un marco de datos (data frame) llamado res con los valores pronosticados y los errores estándar para el modelo condicional. Luego, puedes utilizar cualquier función de trazado para mostrar los resultados, por ejemplo, ggplot2 como se muestra en el código de ejemplo.

Comments are closed.