1
$\begingroup$

I have a daily diary dataset (140obs for 110 persons) which I've analysed using a random slopes and intercept linear mixed model (using FIML). The model has 1 dependent variable, and 5 fixed effects. However, the dataset contains quite a bit of missing data, so I would like to calculate the fraction of missing information using FIML, as specified in the paper by Savalei & Rhemtulla (2012).

However, my mathematical background is such that I really don't understand the specifics mentioned there, so although i'm getting quite good at coding in lme4, I really don't know what I should be doing exactly. I was hoping for some R package to help me out, but I can't find any other then SEM-related packages. As my knowledge of SEM is also close to zero, I have no idea if I can use them (e.g. lavaan, or the fmi function) to get the fraction of missing information for my model.

To be concrete, my question is: is there an easy way of calculating the fraction of missing information for the parameters in a linear mixed model, and if so with what package/software, or can somebody help me understand how to code the procedure suggested by Savalei & Rhemtulla? (for clarity: they describe their step-by-step procedure on page 484 and 485, An estimate of fraction of missing information via FIML

The code for a simulated dataset is as follows:

library(lme4)
library(mice)
set.seed(1)
# simulate dataset
Data <- data.frame(
  ID = rep(1:110, each=140),
  day = rep(1:28, each=5),
  group = rep(1:2, each= 140*55),
  pos_af = runif(15400) * 100
)
Data$ID <- as.factor(Data$ID)
Data$group <- as.factor(Data$group)
# create missingness
rand.num <- sample(x = 1:15400, size = 15400 * 0.2, replace = FALSE) # 20% missingness
Data$pos_af[rand.num] <- NA
# Mixed model 
model <- lme4::lmer(pos_af ~ group + day + group * day + I(day^2) + group * I(day^2) + 
                      (day|ID), data = Data, REML = FALSE)
## impute
imp <- mice::mice(Data)
## Fit models for each imputed dataset. Here you can add the random effects you want, etc
fit <- with(data = imp, exp = lme4::lmer(pos_af ~ group + day + group * day + I(day^2) + group * I(day^2) + 
                                           (day|ID), REML = FALSE))
## pool results
poolFit <- mice::pool(fit)
coef(summary(model))
poolFit

With the true dataset the difference between the estimates of the model on the true data vs mice data is a lot larger (factors 10 for example), but these results illustrate my point. The t-values are all over the place, and the estimates are also quite different... Or am I doing something wrong?

$\endgroup$
  • $\begingroup$ @Krantz, I've changed the original questions so that it now shows the code to simulate the data. Although in the original data the differences are larger, it illustrates the problem I still have: the estimates obtained through mice are quite different from the ones of the original analysis. I'm assuming therefor I can't use the fmi from the mice output for the estimates of the original analysis...any suggestions what I can do would be really appreciated! $\endgroup$ – Daan Ornée Apr 12 at 10:43
1
$\begingroup$

Fraction of missing information $λ$ is a useful measure of the impact of missing data on the quality of estimation of a particular parameter. This measure can be computed for all parameters in the model, and it communicates the relative loss of efficiency in the estimation of a particular parameter due to missing data.

Using MICE, $λ$ can be easily computed as follows:

## Set seed
set.seed(20140619)
## Raw data
data(nhanes)
nhanes
## Impute
imp <- mice::mice(nhanes)
## Fit models for each imputed dataset. Here you can add the random effects you want, etc
fit <- with(data = imp, exp = lm(bmi ~ hyp + chl))
## Pool results
poolFit <- mice::pool(fit)
## Print: The λ for each coefficient is shown.
poolFit

## Call: pool(object = fit)
## 
## Pooled coefficients:
## (Intercept)         hyp         chl 
##    21.97735    -0.60095     0.02799 
## 
## Fraction of information about the coefficients missing due to nonresponse: 
## (Intercept)         hyp         chl 
##      0.2373      0.2159      0.2855

Let me know if this is not what you want.

$\endgroup$
  • $\begingroup$ Thank you so much @Krantz ! I think I got it working with my dataset, however I now have two additional questions: the output shows both lambda and fmi, which i assume stand for fraction of missing information. Which is the correct one? Furthermore, the parameter estimates I got now are different from the ones I got from the original data. Does that mean the fmi/lambda only relate to that specific estimate value? and why are they different in the first place, is that because I've now conducted an analysis with Mult.imp instead of FIML? $\endgroup$ – Daan Ornée Apr 1 at 11:06
  • $\begingroup$ Glad that my answer helped solve your problem. Regarding your two additional questions, could you share a reproducible example? See here: stackoverflow.com/questions/5963269/…. $\endgroup$ – Krantz Apr 1 at 11:42
  • $\begingroup$ Just added the code, is it ok or do you need more? (first time to add code online) $\endgroup$ – Daan Ornée Apr 2 at 11:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.