Почему lavaan делает мудрое удаление в списке при указании пропущенного = "фильм"? - PullRequest
1 голос
/ 28 апреля 2020

Многие мои коллеги используют 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 для несбалансированных групп, я был бы признателен, если бы вы могли направить меня к пакету или чтению.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...