Поставлять объект lavaan.mi (runMI (), semTools) в semPaths (semPlot) в r

Я пытаюсь предоставить объект lavaan.mi (SEM, моделирующий многозначные данные с использованием runMI() от semTools 0.5-2.) до semPaths()(Сюжет 1.1.2). Это возвращает ошибку:

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘semPlotModel_S4’ for signature ‘"lavaan.mi"’

На GitHub это помечено как "проблема", но я был бы признателен за предлагаемое решение. Вот пример:

# Libraries 
library(mice)
library(semTools)
library(lavaan)
library(semPlot)

# Create DF 
HSMiss <- HolzingerSwineford1939[,paste("x", 1:9, sep="")]
randomMiss <- rbinom(prod(dim(HSMiss)), 1, 0.1)
randomMiss <- matrix(as.logical(randomMiss), nrow=nrow(HSMiss))
HSMiss[randomMiss] <- NA

# Specify model
HS.model <- ' visual  =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed   =~ x7 + x8 + x9 '

# Fit the model 
model_fit <- runMI(HS.model, 
              data=HSMiss,
              m = 5, 
              miPackage="mice",
              fun="sem")

# Attempt to create SEM plot
semPaths(model_fit)

1 ответ

Итак, "решение", которое я использовал, заключалось в том, чтобы просто заменить оценки параметров из модели MI на объект "semPlotModel", созданный из объекта "lavaan":

# Libraries 
library(mice)
library(semTools)
library(lavaan)
library(semPlot)

# Create DF 
HSMiss <- HolzingerSwineford1939[,paste("x", 1:9, sep="")]
randomMiss <- rbinom(prod(dim(HSMiss)), 1, 0.1)
randomMiss <- matrix(as.logical(randomMiss), nrow=nrow(HSMiss))
HSMiss[randomMiss] <- NA

# Specify model
HS.model <- ' visual  =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed   =~ x7 + x8 + x9 '

# Create a 'dummy' object, with the same model structure as we'll use in the MI method 
model_fit <- sem(HS.model,  data=HSMiss)

# Create a dummy semplot object 
SEMPLOT <- semPlot::semPlotModel(model_fit)

# Fit the actual model 
model_fit <- runMI(HS.model, 
                   data=HSMiss,
                   m = 5, 
                   miPackage="mice",
                   fun="sem")

# Extract the direct results from the SEM with MI data 
desired_output <- data.frame(standardizedsolution(model_fit))

# Subsitute the desired parameter estimates for the desired ones, in the semplot object 
SEMPLOT@Pars$std <- desired_output$est.std

# Create SEM plot
semPaths(SEMPLOT)

Другие вопросы по тегам