在semPaths中排除节点{semPlot}

时间:2014-10-06 10:41:44

标签: r sem semplot

我试图用R绘制sem-path。

我使用来自Mplus的OUT文件和semPaths {semPLot}。

显然它似乎有效,但我想删除一些潜在的变量,我不知道如何。

我使用以下语法:

从Mplus出来:https://www.dropbox.com/s/vo3oa5fqp7wydlg/questedMOD2.out?dl=0

outfile1 <- "questedMOD.out"
```

semPaths(outfile1,what="est", intercepts=FALSE, rotation=4,  edge.color="black", sizeMan=5, esize=TRUE, structural="TRUE",  layout="tree2", nCharNodes=0, intStyle="multi" )   

1 个答案:

答案 0 :(得分:3)

可能有一种更简单的方法可以做到这一点(并且忽略它是否合理) - 您可以这样做的一种方法是在绘图之前从对象中删除节点。

使用问题Rotate Edges in semPaths/qgraph

中的Mplus示例
library(qgraph)
library(semPlot)
library(MplusAutomation)

# This downloads an output file from Mplus examples
download.file("http://www.statmodel.com/usersguide/chap5/ex5.8.out", 
                                        outfile <- tempfile(fileext = ".out"))

# Unadjusted plot
s <- semPaths(outfile, intercepts = FALSE)

enter image description here

在上面对semPaths的调用中,outfile属于character类,因此该行(靠近semPaths的代码开头)

 if (!"semPlotModel" %in% class(object)) 
                    object <- do.call(semPlotModel, c(list(object), modelOpts))  

semPlot:::semPlotModel.mplus.model(outfile)返回对象。这是班级"semPlotModel"

所以我的想法是首先创建这个对象,修改它然后将这个对象传递给semPaths

# Call semPlotModel on your Mplus file
obj <- semPlot:::semPlotModel.mplus.model(outfile)
# obj <- do.call(semPlotModel, list(outfile)) # this is more general / not just for Mplus

# Remove one factor (F1) from object@Pars - need to check lhs and rhs columns
idx <- apply(obj@Pars[c("lhs", "rhs")], 1, function(i) any(grepl("F1", i)))
obj@Pars <- obj@Pars[!idx, ]

class(obj)

obj现在属于班级"semPlotModel",可以直接传递给semPaths

s <- semPaths(obj, intercepts = FALSE)

enter image description here

您可以使用str(s)查看此返回对象的结构。