我开始使用这个pcalg
包,我对功能有一些疑问,pdag2allDags
并且addBgKnowledge
:
我正在使用 gmG
包提供的示例数据
library(pcalg)
library(Rgraphviz)
data("gmG")
df<-gmG$x
suffStat <- list(C = cor(df), n = nrow(df))
fci.fit<-fci(suffStat, indepTest = gaussCItest, p = ncol(df),alpha = 0.01)
plot(fci.fit)
我想获得所有等效的 DAG。从文档中,它应该使用该功能pdag2allDags
(从这里)工作。我们应该只需要获取amat
(相邻的矩阵)数据。
根据文档上的规范,我认为以下应该可以工作......
plotAllDags <- function(res) {
require(graph)
p <- sqrt(ncol(res$dags))
nDags <- ceiling(sqrt(nrow(res$dags)))
par(mfrow = c(nDags, nDags))
for (i in 1:nrow(res$dags)) {
tmp <- matrix(res$dags[i,],p,p)
colnames(tmp) <- rownames(tmp) <- res$nodeNms
plot(as(tmp, "graphNEL"))
}
}
res1<-pdag2allDags(as(fci.fit,"amat"))
plotAllDags(res1)
但是,相反,它返回:
sqrt(ncol(res$dags)) 中的错误:数学函数的非数字参数
我们还在 s 对象中看到amat
了fci'
。所以,我尝试了:
res2<-pdag2allDags(fci.fit@amat)
plotAllDags(res2)
它也返回相同的:
sqrt(ncol(res$dags)) 中的错误:数学函数的非数字参数
但如果我使用该pc
算法,它会起作用:
pc.fit<-pc(suffStat, indepTest = gaussCItest, p = ncol(df),alpha = 0.01)
plot(pc.fit)
res0<-pdag2allDags(as(pc.fit,"amat"))
plotAllDags(res0)
到底是怎么回事?是不是pdag2allDags
打算处理所有amat
对象(pc、fci、rfci 等)?我无法...allDags
在文档中找到任何其他功能。如何从fci
函数的输出中获取所有等效的 DAG?
函数也是如此addBgKnowledge
。它适用于pc
:
pc.amat2<-addBgKnowledge(gInput = pc.fit@graph,x=1,y=2)
plot(pc.amat2)
但不是为了fci
,甚至文档说它使用amat
fci.amat2<-addBgKnowledge(gInput = as(fci.fit,"amat"),x=1,y=2)
plot(as(t(fci.amat2),"graphNEL"))
它提供:
h(simpleError(msg, call)) 中的错误:在为函数“plot”选择方法时评估参数“x”时出错:参数不是矩阵