使用R软件包'绘制路径图;扫描电镜';使用Graphviz

使用R软件包'绘制路径图;扫描电镜';使用Graphviz,r,latex,sweave,structural-equation-model,R,Latex,Sweave,Structural Equation Model,我使用sem包进行分析。要绘制路径图,我使用sem中的pathDiagram函数获取代码,然后在Graphviz中使用它获取图表。我有两个问题: library(sem) R.DHP <- readMoments(diag=FALSE, names=c('ROccAsp', 'REdAsp', 'FOccAsp', 'FEdAsp', 'RParAsp', 'RIQ', 'RSES', 'FSES', 'FIQ', 'FParAsp')) .62

我使用
sem
包进行分析。要绘制路径图,我使用
sem
中的
pathDiagram
函数获取代码,然后在
Graphviz
中使用它获取图表。我有两个问题:

library(sem)

R.DHP <- readMoments(diag=FALSE, names=c('ROccAsp', 'REdAsp', 'FOccAsp', 
                'FEdAsp', 'RParAsp', 'RIQ', 'RSES', 'FSES', 'FIQ', 'FParAsp'))
    .6247                                                              
    .3269  .3669                                                        
    .4216  .3275  .6404                                      
    .2137  .2742  .1124  .0839                                
    .4105  .4043  .2903  .2598  .1839                          
    .3240  .4047  .3054  .2786  .0489  .2220                    
    .2930  .2407  .4105  .3607  .0186  .1861  .2707              
    .2995  .2863  .5191  .5007  .0782  .3355  .2302  .2950        
    .0760  .0702  .2784  .1988  .1147  .1021  .0931 -.0438  .2087  

model.dhp <- specifyModel()
    RParAsp  -> RGenAsp, gam11,  NA
    RIQ      -> RGenAsp, gam12,  NA
    RSES     -> RGenAsp, gam13,  NA
    FSES     -> RGenAsp, gam14,  NA
    RSES     -> FGenAsp, gam23,  NA
    FSES     -> FGenAsp, gam24,  NA
    FIQ      -> FGenAsp, gam25,  NA
    FParAsp  -> FGenAsp, gam26,  NA
    FGenAsp  -> RGenAsp, beta12, NA
    RGenAsp  -> FGenAsp, beta21, NA
    RGenAsp  -> ROccAsp,  NA,       1
    RGenAsp  -> REdAsp,  lam21,  NA
    FGenAsp  -> FOccAsp,  NA,       1
    FGenAsp  -> FEdAsp,  lam42,  NA
    RGenAsp <-> RGenAsp, ps11,   NA
    FGenAsp <-> FGenAsp, ps22,   NA
    RGenAsp <-> FGenAsp, ps12,   NA
    ROccAsp <-> ROccAsp, theta1, NA
    REdAsp  <-> REdAsp,  theta2, NA
    FOccAsp <-> FOccAsp, theta3, NA
    FEdAsp  <-> FEdAsp,  theta4, NA



sem.dhp <- sem(model.dhp, R.DHP, 329,
    fixed.x=c('RParAsp', 'RIQ', 'RSES', 'FSES', 'FIQ', 'FParAsp'))



pathDiagram(sem.dhp, min.rank='RIQ, RSES, RParAsp, FParAsp, FSES, FIQ', 
    max.rank='ROccAsp, REdAsp, FEdAsp, FOccAsp')
库(sem)
R.DHP RGenAsp,gam12,北美
RSES->RGenAsp,gam13,北美
FSES->RGenAsp,gam14,北美
RSES->FGenAsp,gam23,NA
FSES->FGenAsp,gam24,NA
FIQ->FGenAsp,gam25,北美
FParAsp->FGenAsp,gam26,北美
FGenAsp->RGenAsp,β12,NA
RGenAsp->FGenAsp,β21,NA
RGenAsp->ROccAsp,NA,1
RGenAsp->REdAsp,lam21,北美
FGenAsp->FOccAsp,NA,1
FGenAsp->FEdAsp,lam42,北美
RGenAsp RGenAsp,ps11,北美
FGenAsp FGenAsp,ps22,北美
RGenAsp FGenAsp,ps12,北美
ROccAsp ROccAsp,θ1,NA
REdAsp REdAsp,θ2,NA
FOccAsp FOccAsp,θ3,NA
FEdAsp FEdAsp,θ4,NA

sem.dhp您只需要指定一个文件名(不带扩展名!),请参阅
file=
参数。如文档中所述,它将生成
.dot
和PDF文件(但如果您只需要graphviz输出,则设置
output.type=“dot”

调用上述命令后,我会在swave文件中使用一个简单的
\includegraphics
命令。(如果没有在与主
.Rnw
文件相同的目录中生成SEM图,则可能需要调整路径以查找图形。)

更新

根据您的评论,是的,从函数调用(
路径图
)中运行外部程序似乎有问题。因此,这里有一个不太优雅的解决方案来生成路径图并将其包含在swave->TeX文档中

这是swave文件(
sw.rnw
):


此额外消息
运行dot-Tpdf-o Path.pdf Path.dot
无法切换。我们将非常感谢您的帮助。非常感谢你。很好的解决方案。一切都很好,只是我不知道如何使消息不可见
运行dot-Tpdf-o Path.pdf Path.dot
。无论如何,这不是一个大问题。我有一些关于这个问题的问题:()和()。有一个问题与我的评论完全相同。如果你能看看这些,我将不胜感激。谢谢你的帮助。我已经开始赏金了,等待时间到了,我会奖励你的。感谢您提供的精彩解决方案,它将对我的工作有很大帮助。再次感谢。@MYaseen208我没有看到这条消息:对于
pathDiagram()
(即,不使用
file=
)的默认参数,graphviz语法被写入R标准输出。您是否将
文件=
放在对
路径图()
的调用中,而不是
捕获.output()
?我会考虑你的另一个问题。关于tex.SE one,最好简单地删除它,IMO(在SE站点上交叉发布不是一个好主意:)
\documentclass{article}
\usepackage{graphicx}
\begin{document}
<<echo=TRUE>>=
library(sem)
R.DHP <- readMoments("sem.cov", diag=FALSE, 
                     names=c('ROccAsp', 'REdAsp', 'FOccAsp', 
                       'FEdAsp', 'RParAsp', 'RIQ', 'RSES',  
                       'FSES', 'FIQ', 'FParAsp'))
model.dhp <- specifyModel(file="sem.mod")
sem.dhp <- sem(model.dhp, R.DHP, 329,
               fixed.x=c('RParAsp', 'RIQ', 'RSES', 'FSES', 'FIQ', 'FParAsp'))            
capture.output(pathDiagram(sem.dhp, min.rank='RIQ, RSES, RParAsp, FParAsp, FSES, FIQ', 
            max.rank='ROccAsp, REdAsp, FEdAsp, FOccAsp'), file="sem.dot")
@
<<echo=FALSE>>=
system("dot -Tpdf -o fig1.pdf  sem.dot")
@

And here is the path diagram.

\begin{center}
\includegraphics{fig1}
\end{center}

\end{document}
$ R CMD Sweave sw.rnw
$ R CMD texi2pdf sw.tex