3 votos

Aislar los efectos en un modelo causal

Estoy trabajando en tratar de recuperar las medias de grupo correctas en un modelo de inferencia causal (soy bastante nuevo en la inferencia causal) que estoy ejecutando en un conjunto de datos simulados. Creo que el problema con el que me encuentro es el método y el orden en el que estoy controlando los diferentes efectos en el conjunto de datos.

A grandes rasgos, éste es el modelo que me interesa ajustar.

Model DAG

Tenemos datos divididos en 4 grupos. Para cada valor observado de obs obtenemos cuatro datos: qué individuo individual 1 era, qué individuo individual 2 y el valor de la covariable effect . Cada individuo en las colecciones de individual 1 y individual 2 tiene alguna media de efecto desconocida e inobservable; los valores de effect se observan para cada observación, así como el grupo del que procede. Además, nótese que las medias de los effect se asocian a un individual 1 valor, pero tienen alguna fluctuación aleatoria.

Las medias de los valores no observados de individual 1 y individual 2 varían según el grupo, al igual que la media de los valores de effect . Estamos interesados en recuperar los medios de grupo de individual 1 después de controlar por individual 2 y effect .

Este es el proceso de generación de datos en R:

set.seed(20)
group <- c(rep(1, 100), rep(2, 100), rep(3, 100), rep(4, 100))
individual1 <- 1:400
individual2 <- 1:400
rand_effect1 <- c(rnorm(100, mean = 0, sd = 1),
                  rnorm(100, mean = 0.5, sd = 1),
                  rnorm(100, mean = 1, sd = 1),
                  rnorm(100, mean = 1.5, sd = 1))
rand_effect2 <- c(rnorm(100, mean = 0, sd = 1),
                  rnorm(100, mean = -1, sd = 1),
                  rnorm(100, mean = -2, sd = 1),
                  rnorm(100, mean = -3, sd = 1))
fix_effect <- c(rnorm(100, mean = 0, sd = 1),
                rnorm(100, mean = 0.25, sd = 1),
                rnorm(100, mean = 0.5, sd = 1),
                rnorm(100, mean = 0.75, sd = 1))
ind1 <- sample(individual1, size = 5000, replace = TRUE)
re1 <- rand_effect1[ind]
fe <- fix_effect[ind] + rnorm(5000, mean = 0, sd = 0.5)
grp <- group[ind]
f <- (floor((ind1-1) / 100) * 100) + 1
c <- (floor((ind1-1) / 100) + 1) * 100
ind2 <- c()
for(i in 1:5000) {
  v <- floor(i / 100)
  ind2 <- c(ind2, 
            sample(f[i]:c[i], 1))
}
re2 <- rand_effect2[ind2]
obs <- re1 + re2 + fe + rnorm(5000, mean = 0, sd = 4)
training_data <- data.frame(
  group = as.character(grp),
  individual1 = as.character(ind1),
  individual2 = as.character(ind2),
  effect = fe,
  obs = obs
)

Ciertamente, podría meter todo esto en un modelo de efectos aleatorios con individual 1 y individual 2 se maneja de forma adecuada. Sin embargo, sería ideal incluir las medias de los grupos en el modelo; este modelo debería ser capaz de manejar adecuadamente a los individuos con tamaños de muestra pequeños de diferentes grupos. Sin saber nada de un individual 1 valor, salvo el hecho de que proceden del grupo 3, debería poder decirnos, finalmente, que su efecto aleatorio individual está en torno a 1 (como queda claro en el proceso de generación de datos). Sin embargo, está claro que no es tan fácil como lanzar un group en el modelo, ya que hay diferentes efectos de grupo en las tres entradas.

Cualquier sugerencia sobre cómo controlar adecuadamente cada componente de este modelo sería muy apreciada.

0voto

user164061 Puntos 281

Sin embargo, está claro que no es tan fácil como introducir un factor de grupo en el modelo, ya que hay diferentes efectos de grupo en las tres entradas.

Sólo veo un forma en que el grupo tiene un efecto y es en las diferentes medias de las distribuciones normales.

rand_effect1 <- c(rnorm(100, mean = 0, sd = 1),
                  rnorm(100, mean = 0.5, sd = 1),
                  rnorm(100, mean = 1, sd = 1),
                  rnorm(100, mean = 1.5, sd = 1))
rand_effect2 <- c(rnorm(100, mean = 0, sd = 1),
                  rnorm(100, mean = -1, sd = 1),
                  rnorm(100, mean = -2, sd = 1),
                  rnorm(100, mean = -3, sd = 1))
fix_effect <- c(rnorm(100, mean = 0, sd = 1),
                rnorm(100, mean = 0.25, sd = 1),
                rnorm(100, mean = 0.5, sd = 1),
                rnorm(100, mean = 0.75, sd = 1))

También se pueden considerar distribuciones normales con media cero y un efecto fijo separado para el grupo.

rand_effect1 <- c(rnorm(100, mean = 0, sd = 1),
                  rnorm(100, mean = 0, sd = 1) + 0.5,
                  rnorm(100, mean = 0, sd = 1) + 1,
                  rnorm(100, mean = 0, sd = 1) + 1.5)
rand_effect2 <- c(rnorm(100, mean = 0, sd = 1),
                  rnorm(100, mean = 0, sd = 1) -1 ,
                  rnorm(100, mean = 0, sd = 1) - 2,
                  rnorm(100, mean = 0, sd = 1) - 3)
fix_effect <- c(rnorm(100, mean = 0, sd = 1),
                rnorm(100, mean = 0, sd = 1) + 0.25,
                rnorm(100, mean = 0, sd = 1) + 0.5,
                rnorm(100, mean = 0, sd = 1) + 0.75)

¿O es sólo una simplificación de su verdadero problema y tiene formas más complicadas de cómo el grupo tiene un efecto?


Además, debido a que los tres efectos diferentes del grupo resultan efectivamente en un solo efecto, no se pueden obtener las 12 medias individuales. Sólo puede descubrir la suma de las tres medias y obtener 4 parámetros. O si se mezclan individuos de diferentes grupos, entonces debería poder descubrir 8 parámetros.

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