Поставлять объект 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)