Многие мои коллеги используют FIML в Mplus для устранения недостающих данных. Я работаю над сравнительным исследованием методов, чтобы проиллюстрировать некоторые преимущества / недостатки использования FIML по сравнению с другими подходами вменения. Весь мой анализ сделан в R, поэтому я надеялся сравнить эффекты лечения от FIML с использованием лавы в R.
Я сразу столкнулся с двумя проблемами:
1) Очевидная неспособность указать модель сравнимо со случайными перехватами от lmer, когда у нас есть несбалансированные группы,
и самые загадочные
2) Тот факт, что при выполнении регрессии в лаве с отсутствующими данными (генерируемыми MAR) оценки идентичны тем, которые мы получаем при удалении по спискам как в lavaan, так и с помощью lm ()
. Я сгенерировал пример, иллюстрирующий эту проблему ниже
## stack overflow example
set.seed(1234)
library(MASS)
x <- rnorm(800,0,3)
site <- c(rep(seq(1:30),20),rep(seq(1:8),30))[1:800]
# random intercepts by site
reff <- rnorm(30,1,1)
reffi <- reff[site]
site_id <- as.factor(site[site])
# treatment variable
t <- rbinom(30,1,.5)
treat <- t[site]
## Assume there's an interaction we don't know about, so that the treatment effect would be
## underestimated if we don't address the missingness in x2 correctly
y <- rnorm(800,3+x+1*(treat*(x-mean(x))^2)+reffi,.2)
data <- data.frame("y"=y,"x"=x,"treat"=treat,"reffi"=reffi,"site_id"=as.ordered(site_id))
## MAR mechanism
# missingness in y
library(arm)
p <- invlogit(-3+x)
missing_y <- rbinom(800,1,p)
y_miss <- y
y_miss[missing_y==1] <- NA
data$y_miss <- y_miss
## Say that for our analysis we only care about the average treatment effect, not its interactions
## Ideally we would consider random intercepts
library(lme4)
## Results without missingness
summary(lmer(y~x+treat+(1|site_id),data=data))
## Results with missingness
summary(lmer(y_miss~x+treat+(1|site_id),data=data))
library(lavaan)
## But we can't run random intercepts with lavaan for unbalanced groups, right?
## so, looking at simple regression for comparison with lavaan regression
## Results without missingness
lm_full <- lm(y~x+treat,data=data)
## Results with missingness
lm_miss <- lm(y_miss~x+treat,data=data)
summary(lm_full)
summary(lm_miss)
## Nothing changes, results are identical as for linear regression with listwise deletion
## when specifying FIML
summary(lavaan::sem('
y_miss~ x + treat
y_miss~1', data,meanstructure=T,missing="listwise"))
summary(lavaan::sem('
y_miss~ x + treat
y_miss~1', data,meanstructure=T,missing="fiml"))
Может кто-нибудь помочь мне понять, почему оценки и их SE одинаковы? Это то, что мы должны ожидать, когда есть только один результат, когда мы используем FIML? Будет ли это работать по-другому в MPlus? Это ошибка в lavaan?
В качестве бонуса, если кто-нибудь знает, как запустить модель случайных перехватов с FIML в R для несбалансированных групп, я был бы признателен, если бы вы могли направить меня к пакету или чтению.
Спасибо!