R 如何在dagitty图中将变量循环为观察(非潜在)变量
在下面的图中,我如何在某些变量周围画一个圆圈R 如何在dagitty图中将变量循环为观察(非潜在)变量,r,dagitty,R,Dagitty,在下面的图中,我如何在某些变量周围画一个圆圈 library(dagitty) g = dagitty('dag{ A [pos="-1,0.5"] W [pos="0.893,-0.422"] X [adjusted,pos="0,-0.5"] Y [pos="1,0.5"] A -> Y X -> A X -> W X -> Y }') png(&q
library(dagitty)
g = dagitty('dag{
A [pos="-1,0.5"]
W [pos="0.893,-0.422"]
X [adjusted,pos="0,-0.5"]
Y [pos="1,0.5"]
A -> Y
X -> A
X -> W
X -> Y
}')
png("mp.png", width = 500, height = 500,res=300)
plot(g)
dev.off()
在图中,你可以指示eg潜伏期或调整期,它会改变圆圈的颜色,但这不是我想要的,尽管如果可以从R中得到这些,这就足够了,尽管我不喜欢在基于web的版本中变量靠近圆圈的方式。我真的想圈出观察到的变量,而不是圈出未观察到的变量。我在
dagitty
中没有找到任何信息,但是bnlearn
软件包可以很容易地添加圆圈/或其他形状。但我注意到你们只想给观察到的特征加上圆圈,而不是潜在变量(最好在你们的标题中提到)。那么我的代码可能不是您想要的。我还在这里附上代码供您参考。或者,你可以用不同的颜色来区分观察到的/潜在的特征。使用bnlearn
()
我在
dagitty
中没有找到任何信息,但是bnlearn
软件包可以轻松添加圆形或其他形状。但我注意到你们只想给观察到的特征加上圆圈,而不是潜在变量(最好在你们的标题中提到)。那么我的代码可能不是您想要的。我还在这里附上代码供您参考。或者,你可以用不同的颜色来区分观察到的/潜在的特征。使用bnlearn
()
我写了一个函数,它把你想圈出的点作为输入,提取出这些点的位置并圈出它们
library(dagitty)
g = dagitty('dag{
A [pos="-1,0.5"]
W [pos="0.893,-0.422"]
X [adjusted,pos="0,-0.5"]
Y [pos="1,0.5"]
A -> Y
X -> A
X -> W
X -> Y
}')
circle_points <- function(points_to_circle, g) {
#few regexs to extract the points and the positions from "g"
#can surely be optimized, made nicer and more robust but it works for now
fsplit <- strsplit(g[1], "\\]")[[1]]
fsplit <- fsplit[-length(fsplit)]
fsplit <- substr(fsplit, 1, nchar(fsplit)-1)
fsplit[1] <- substr(fsplit[1], 6, nchar(fsplit))
vars <- sapply(regmatches(fsplit,
regexec("\\\n(.*?)\\s*\\[", fsplit)), "[", 2)
pos <- sub(".*pos=\\\"", "", fsplit)
#build dataframe with extracted information
res_df <- data.frame(vars = vars,
posx = sapply(strsplit(pos, ","), "[",1),
posy = sapply(strsplit(pos, ","), "[",2))
df_to_circle <- res_df[res_df$vars %in% points_to_circle,]
#y-position seems to be inverted and has to be multiplied by -1
points(c(as.numeric(df_to_circle$posx)),
c(as.numeric(df_to_circle$posy) * -1),
cex = 4)
}
plot(g)
circle_points(c("A", "Y"), g)
库(dagitty)
g=dagitty('dag{
A[pos=“-1,0.5”]
W[pos=“0.893,-0.422”]
X[已调整,pos=“0,-0.5”]
Y[pos=“1,0.5”]
A->Y
X->A
X->W
X->Y
}')
圈出点我写了一个函数,它把你想圈出的点作为输入,提取出所说点的位置并圈出它们
library(dagitty)
g = dagitty('dag{
A [pos="-1,0.5"]
W [pos="0.893,-0.422"]
X [adjusted,pos="0,-0.5"]
Y [pos="1,0.5"]
A -> Y
X -> A
X -> W
X -> Y
}')
circle_points <- function(points_to_circle, g) {
#few regexs to extract the points and the positions from "g"
#can surely be optimized, made nicer and more robust but it works for now
fsplit <- strsplit(g[1], "\\]")[[1]]
fsplit <- fsplit[-length(fsplit)]
fsplit <- substr(fsplit, 1, nchar(fsplit)-1)
fsplit[1] <- substr(fsplit[1], 6, nchar(fsplit))
vars <- sapply(regmatches(fsplit,
regexec("\\\n(.*?)\\s*\\[", fsplit)), "[", 2)
pos <- sub(".*pos=\\\"", "", fsplit)
#build dataframe with extracted information
res_df <- data.frame(vars = vars,
posx = sapply(strsplit(pos, ","), "[",1),
posy = sapply(strsplit(pos, ","), "[",2))
df_to_circle <- res_df[res_df$vars %in% points_to_circle,]
#y-position seems to be inverted and has to be multiplied by -1
points(c(as.numeric(df_to_circle$posx)),
c(as.numeric(df_to_circle$posy) * -1),
cex = 4)
}
plot(g)
circle_points(c("A", "Y"), g)
库(dagitty)
g=dagitty('dag{
A[pos=“-1,0.5”]
W[pos=“0.893,-0.422”]
X[已调整,pos=“0,-0.5”]
Y[pos=“1,0.5”]
A->Y
X->A
X->W
X->Y
}')
圆点