Я пытаюсь использовать semPlot :: semPaths, чтобы построить график бифакторной модели, которую я запускал в лаве. Документация для semPlot и qgraph действительно великолепна, поэтому я смог выяснить большинство требуемых мне спецификаций, но есть одна вещь, которую я не уверен, что это можно исправить. Как вы можете видеть на графике ниже, когда латентный фактор (например, «ext») связан с широким диапазоном переменных манифеста, становится трудно отследить, какие стрелки / метки связаны с какими переменными манифеста. (Например, трудно сказать, что загрузка ext для adhd3 составляет 0,23.) Похоже, что стрелка пытается подключиться к центру меток переменных манифеста, а не к ближайшей стороне. Есть ли способ изменить это так, чтобы было легче читать? Большое спасибо!

The CFA plot output, a png file.

Вот код, который я использовал (извините, это неуклюже - 1) я новичок в этом и 2) скрытые переменные автоматически находились в странных местах, поэтому я определил их положение вручную):

full_bif_mod <- "ext =~ cd1 + cd2 + cd3 + cd4 + cd5 + cd6 + cd7 + cd8 + cd9 + cd10 + cd11 + cd12 + cd13 + cd14 + cd15 + cd16 + cd17 + aud1 + aud2 + aud3 + aud4 + aud5 + aud6 + aud7 + aud8 + aud9 + aud10 + adhd1 + adhd2 + adhd3
                cd =~ cd1 + cd2 + cd3 + cd4 + cd5 + cd6 + cd7 + cd8 + cd9 + cd10 + cd11 + cd12 + cd13 + cd14 + cd15 + cd16 + cd17
                aud =~ aud1 + aud2 + aud3 + aud4 + aud5 + aud6 + aud7 + aud8 + aud9 + aud10
                adhd =~ adhd1 + adhd2 + adhd3
                ext ~~ 0*adhd
                ext ~~ 0*cd
                ext ~~ 0*aud
                adhd ~~ 0*cd
                adhd ~~ 0*aud
                cd ~~ 0*aud
                  "
summary((full_bifactor <- cfa(full_bif_mod, std.lv=TRUE, data=dat)),fit.measures=TRUE, standardized = T)

 
x=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, 15, 9, 22, 29)
y=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1)
ly=matrix(c(y,x), ncol=2)
semPaths(full_bifactor, layout=ly, whatLabels="std", style="lisrel", nCharNodes=5, exoCov=FALSE, residuals=FALSE, label.scale=TRUE, sizeMan2=1.5, sizeMan=6,  asize=1, edge.color="black", edge.label.color="black", edge.label.position=.8, edge.label.margin=-.1, width=17, height=20, filetype="png",filename="cfa"
        )
1
E. Perkins 14 Мар 2021 в 07:08

1 ответ

Лучший ответ

Это можно сделать с помощью точек соединения краев в qgraph! Смотри ниже:

# Save plot to object:
Plot <- semPaths(full_bifactor, layout=ly, 
         whatLabels="std", style="lisrel", nCharNodes=5, 
         exoCov=FALSE, residuals=FALSE, label.scale=TRUE, 
         sizeMan2=1.5, sizeMan=6,  asize=1, edge.color="black", 
         edge.label.color="black", edge.label.position=.8, edge.label.margin=-.1,
         width=17, height=20, filetype="png",filename="cfa"
)

# Add edge connect point to end point of edges (2nd column) for bifactor:
Plot$graphAttributes$Edges$edgeConnectPoints[1:30,2] <- 0.5 * pi

# Add edge connect point to end point of edges (2nd column) for other factors:
Plot$graphAttributes$Edges$edgeConnectPoints[31:60,2] <- 1.5 * pi


# Plot again:
library("qgraph")
plot(Plot)

С смоделированными данными: введите описание изображения здесь

1
Sacha Epskamp 16 Мар 2021 в 09:27