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
}')
圆点