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.
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.