2014-10-06 2 views
2

Я пытаюсь построить СЭМ-путь с R.Исключить узел в semPaths {semPlot}

Im используя файл OUT provinent из Mplus с 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") 
+0

Показать структуру данных. Попробуйте опубликовать вывод 'str (x)' или даже лучше, сделайте [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). –

+0

Я только что загрузил OUTfile из Mplus. Спасибо за ваш совет :) –

+0

Я предлагаю вам «вставить» код в свой ответ, чтобы вопрос не устарел, как только вы удалите файл из Dropbox. –

ответ

3

Там может быть более простой способ сделать это (и не обращая внимания, если это имеет смысл делать это) - один из способов вы можете сделать это, удалив узлы из объекта до построения графика.

Используя пример Mplus из вашего вопроса Rotate Edges in semPaths/qgraph

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 [email protected] - need to check lhs and rhs columns 
idx <- apply([email protected][c("lhs", "rhs")], 1, function(i) any(grepl("F1", i))) 
[email protected] <- [email protected][!idx, ] 

class(obj) 

obj теперь класса "semPlotModel" и могут быть переданы непосредственно semPaths

s <- semPaths(obj, intercepts = FALSE) 

enter image description here

Вы можете использовать str(s), чтобы увидеть структуру этого возвращается объект.

+0

Это не совсем то, что мне нужно, но я думаю, что это хорошая подсказка, и теперь я не могу сделать это сам. Спасибо :) –

+0

приветствуется - я не знал об этом пакете, поэтому я планировал эти модели вручную с помощью Graphviz, поэтому я очень рад, что вы задали этот вопрос. – user20650

+0

Я как бы решил этот вопрос несколько дней назад в «грубом» способе, но это лучше :) –

Смежные вопросы