2012-09-18 22 views
6

Estoy intentando hacer un análisis de mediación en R usando el paquete mediate. He revisado la documentación sobre cómo hacerlo y he leído los ejemplos proporcionados por R (es decir, ya he ejecutado "example (mediate)"). A pesar de esto, no puedo ejecutar la mediación más simple. Idealmente, me gustaría hacer un procedimiento de arranque, a la Preacher & Hayes (2004).R Análisis de mediación - Bootstrapping

Aquí está el código que estoy tratando de ejecutar:

model.m <- lm(desirdata1$zpers1 ~ desirdata1$zdesir1 + desirdata1$age) 
model.y <- lm(desirdata1$zpers1 ~ desirdata1$age) 
age1test <- mediate(model.m, model.y,treat="age", mediator="zdesir1", 
        boot=TRUE, sims=50) 

Tenga en cuenta que el conjunto de datos se llama desirdata, el tratamiento se llama age, el resultado se llama zpers1 y el mediador se llama "zdesir1". Cuando ejecuto esto, me sale el siguiente error:

Error in `[.data.frame`(m.data, , treat) : undefined columns selected 

Parece estar diciendo que una variable (en concreto, la variable de tratamiento) no existe. Sin embargo, los nombres de ejecución (desirdata) muestran que la variable está allí, y se llama correctamente, al igual que todas las otras variables. Los primeros dos modelos (model.m y model.y) funcionan bien, y el resultado se ve como debería. Es solo el modelo de mediación que no puedo ejecutar. No he cometido ningún error tipográfico, por lo que puedo decir, y lo he comprobado cien veces.

¿Pensamientos?

+0

Supongo que quieres escribir "mediation package"? –

+0

Está buscando 'age', pero encuentra' desirdata1 $ age'. No es exactamente lo mismo (creo que esto es lo que quiere decir @Dwin con "romper" el comentario). –

+0

DWin - sí, paquete de mediación. Maldita sea. Y gracias por la entrada, Romano. –

Respuesta

1

Cuando leo los ejemplos en la documentación, el model.m para el modelo de mediador tendrá un resultado diferente que el del objeto de regresión principal model.y. Ya que no han descrito los antecedentes y qué tipo de datos es difícil ser muy seguro de esto, pero pregunta si la intención de escribir:

model.m <- lm(zdesir1 ~ age, data=desirdata1) 
model.y <- lm(zpers1 ~ age, , data=desirdata1) 
age1test <- mediate(model.m, model.y,treat="age", mediator="zdesir1", 
        boot=TRUE, sims=50) 

lo eché usando formula y data objetos, ya que algunas funciones de regresión se descomponen cuando se les dan vectores. También hace que sea más fácil ver los errores tipográficos.

+0

DWin-- Gracias, y su interpretación fue correcta, creo, pero todavía no puedo hacer que funcione. Intenté su versión, y ahora tengo el mismo error, pero alegando que el mediador no existe: Error en '[.data.frame' (y.data,, mediator): columnas indefinidas seleccionadas. ¿Alguna otra idea? –

1

Pruebe el paquete MBESS. Preacher lo recomienda y puedes usar la función de mediación. Si quieres arrancar, simplemente asegúrate de que dice bootstrap = TRUE. B es el número de bootstraps.

mediation(x, mediator, dv, S = NULL, N = NULL, x.location.S = NULL, 
mediator.location.S = NULL, dv.location.S = NULL, mean.x = NULL, 
mean.m = NULL, mean.dv = NULL, conf.level = 0.95, 
bootstrap = FALSE, B = 1000, which.boot="both", save.bs.replicates=FALSE) 
+0

Muy bien, estoy probando esto como otra alternativa. Todavía estoy teniendo problemas, si tienes alguna idea, no dudes en compartirla. Cuando intento ejecutar esto, aparece un error que indica que el número de filas de matrices debe coincidir: Error en cbind (x, mediator, dv): número de filas de matrices debe coincidir (ver arg 3). Sin embargo, ya excluí los datos faltantes, y el n para cada una de las variables es el mismo (13044). ¿Alguna idea sobre qué podría estar molesto? –

0

Me encontré con el mismo problema con los datos simulados, así que ejecuté la depuración (mediate) y encontré donde estaba el problema. Creo que el problema está en la porción [treat = "age", mediator = "zdesir1"] del código. Si adjunta los datos, no debería encontrarse con ese problema. Alternativamente, puede usar [treat = "desirdata1 $ age", mediator = "desirdata1 $ zdesir1"] que debería resolver el problema.

0

Bueno intente esto:

model.m <- lm(zdesir1 ~ age, data=desirdata1) 
model.y <- lm(zpers1 ~ age + zdesir1, data=desirdata1) 
age1test <- mediate(model.m, model.y,treat="age", mediator="zdesir1", 
        boot=TRUE, sims=50) 

para que sea simple, el modelo mediador (model.m) debe tener el mediador como el resultado.

2

Sus modelos no son correctos. model.m debe predecir el mediador desde el IV, y model.y debe predecir el DV del mediador y IV.

model.m <- lm(desirdata1$zdesir1 ~ desirdata1$age) 
model.y <- lm(desirdata1$zpers1 ~ desirdata1$zdesir1 + desirdata1$age) 
age1test <- mediate(model.m, model.y, treat="age", mediator="zdesir1", boot=TRUE, sims=50) 
Cuestiones relacionadas