gpt4 book ai didi

r - 使用 Graphviz 使用 R 包 'sem' 绘制路径图

转载 作者:行者123 更新时间:2023-12-04 06:03:59 24 4
gpt4 key购买 nike

我使用 sem包来做我的分析。要绘制路径图,我使用 pathDiagram函数在 sem获取代码,然后在 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')
  • 如何直接从 R 绘制路径图使用 pathDiagram功能?
  • 如何在 Rnw 中包含图形文件为 Sweave ?
  • 最佳答案

    您只需要指定一个文件名(没有扩展名!),请参阅 file=争论。如文档中所述,它将生成 .dot和 PDF 文件(但如果您只想要 graphviz 输出,请设置 output.type="dot")。

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

    更新

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

    这是 Sweave 文件 ( sw.rnw ):

    \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}

    文件 sem.covsem.mod包含在上例中手动输入的协方差矩阵和结构模型(简单地复制/粘贴到纯文本文件中)。我不是很高兴不得不使用 capture.output()因为我找不到从块中屏蔽它的调用的方法。也许你会找到一个更好的方法来做到这一点(想法是使用 system() ,并且可以很容易地在块参数中用 echo=FALSE 屏蔽)。

    我碰巧编译了上面的文件如下:
    $ R CMD Sweave sw.rnw
    $ R CMD texi2pdf sw.tex

    enter image description here

    关于r - 使用 Graphviz 使用 R 包 'sem' 绘制路径图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8585108/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com