繁体   English   中英

pcalg 包上的 `pdag2allDags` 和 `addBgKnowledge` 函数存在问题

Problem with the `pdag2allDags` and `addBgKnowledge` functions on pcalg package

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我开始使用pcalg包,我对pdag2allDagsaddBgKnowledge函数有一些疑问:

我正在使用包提供的示例数据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 (来自此处)。 我们应该只需要拿到amatdjacentRIX)数据。

文档的规范来看,我认为以下应该有效......

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)) 中的错误:数学函数的非数字参数

我们还看到了fci'对象中的amat 所以,我试过:

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”时出错:参数不是矩阵

1 个回复

我相信这不应该是一个理想的答案,它应该有更好的方法来做到这一点,但由于我没有得到任何答案,我做了一些尝试,我现在分享我是如何规避这个问题的......

如果我们评估结构,两者确实都在处理邻接矩阵(amat)......但它们是不同的...... pc输出包括' cpdag '类型的amatfci输出,' pag '类型的amat ......

as(pc.fit,"amat")

我们得到:

Adjacency Matrix 'amat' (8 x 8) of type ‘cpdag’:
  1 2 3 4 5 6 7 8
1 . 1 . . . . . .
2 1 . 1 . 1 . . .
3 . 1 . . . . . .
4 . . . . . . . .
5 . 1 . . . . . .
6 1 . . . 1 . . .
7 . . . . . 1 . .
8 1 . . . 1 . . .

并与

as(fci.fit,"amat")

我们得到:

Adjacency Matrix 'amat' (8 x 8) of type ‘pag’:
  1 2 3 4 5 6 7 8
1 . 1 . . . 2 . 2
2 1 . 1 . 1 . . .
3 . 1 . . . . . .
4 . . . . . . . .
5 . 1 . . . 2 . 2
6 3 . . . 3 . 2 .
7 . . . . . 3 . .
8 3 . . . 3 . . .

或者,与

fci.fit@amat

我们得到

  1 2 3 4 5 6 7 8
1 0 1 0 0 0 2 0 2
2 1 0 1 0 1 0 0 0
3 0 1 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0
5 0 1 0 0 0 2 0 2
6 3 0 0 0 3 0 2 0
7 0 0 0 0 0 3 0 0
8 3 0 0 0 3 0 0 0

pcalg对文档pdag2allDags没有明确提到...

  • 函数定义说'一个给定的部分有向无环图(PDAG)'。
  • 该示例显示了一个定义为 0 和 1 的矩阵的“ amat ”,与fcipc函数没有任何联系

但是我找到的解决方案始于采用“ pag ”类型amat并将其转换为“ cpdag ” ...

嗯……“ pag ”类型的amat确实不仅仅由零和一组成……但我们现在从这里开始

  • 3 表示列是原因,行是结果......
  • 和 2 表示列是结果,行是原因......

所以,我们替换它们创建一个新函数

pag2cpdag<-function(fciAlgo){
  res<-as(fciAlgo,"amat")#a amat type pag
  res[res==3]<-1
  res[res==2]<-0
  return(res)
}

所以我们得到

pag2cpdag(fci.fit)

以下输出:

Adjacency Matrix 'amat' (8 x 8) of type ‘pag’:
  1 2 3 4 5 6 7 8
1 . 1 . . . . . .
2 1 . 1 . 1 . . .
3 . 1 . . . . . .
4 . . . . . . . .
5 . 1 . . . . . .
6 1 . . . 1 . . .
7 . . . . . 1 . .
8 1 . . . 1 . . .

我无法更改类型,但它提供了cpdagamat格式的矩阵。 并且可以应用于pdag2allDags ...

res1<-pdag2allDags(pag2cpdag(fci.fit))
plotAllDags(res1)

充分返回所有等效的 DAG ......


但是它仍然不适用于带有fci生成的对象的addBgKnowledge即使文档说它使用amat

fci.amat2<-addBgKnowledge(gInput = pag2cpdag(fci.fit),x=1,y=2)
plot(as(t(fci.amat2),"graphNEL"))

它返回:

Error in h(simpleError(msg, call)) : error in evaluating the argument 'x' in selecting a method for function 'plot': no method or default for coercing “amat” to “graphNEL”

的输出

fci.amat2

好像没问题...

Adjacency Matrix 'amat' (8 x 8) of type ‘pag’:
  1 2 3 4 5 6 7 8
1 . . . . . . . .
2 1 . . . . . . .
3 . 1 . . . . . .
4 . . . . . . . .
5 . 1 . . . . . .
6 1 . . . 1 . . .
7 . . . . . 1 . .
8 1 . . . 1 . . .

查看示例,将其绘制为graphNEL的简单矩阵工作......因此,只需转换为简单矩阵即可解决问题:

pc.amat2<-addBgKnowledge(pag2cpdag(fci.fit),x=1,y=2)
class(pc.amat2)<-"matrix"
plot(as(t(pc.amat2),"graphNEL"))
1 基类的模板参数包上的C ++ 11调用成员函数(如果存在)

我检查了类似的问题。 这很接近,但不是重复的。 本质上,我想在基类的参数包上调用一个函数(如果存在)。 我有一种C ++ 11的方法可以正常工作,但对我来说并不令人满意。 有人可以提供更好的方法(例如,更好的性能和更少的样板代码): 源代码: 输出: Compil ...

2 pcalg的PC稳定

我正在使用软件包“ pcalg” 2.0-10版中的pc-stable来学习结构。 据我了解,该算法不会影响输入数据的顺序,因为它是order_independent。 当我以不同的顺序运行它时,我得到了不同的图形。 谁能帮我解决这个问题,这是我的代码。 par(mfrow = c ...

3 面对问题以在烤面包上显示消息

您好,我正在使用本教程为我的webview设置转轮,删除此行后它可以正常工作 Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 而错误正在actitvity , 另外,我想知道如 ...

2011-07-10 18:46:37 3 242   android
4 使用laravel Image包上传.JPG文件的问题

我尝试通过以下打击代码使用 Laravel8 Image Package 调整大小并上传图像: 它可以工作并且一切正常但是当我选择 .JPG 文件时(注意它与 .jpg 不同)它不起作用并出现此错误: ...

5 NodeJS在Azure软件包上的部署问题

当我在Azure上部署NodeJS应用程序时,一个原因是我的Node包被破坏了。 我得到的错误是: 当我下载已部署的文件时,它甚至在本地不再起作用。 我必须再次在本地重新安装bcrypt软件包才能使其正常工作。 有谁知道为什么会这样吗? 更新:我找到了一种解决此问题的方法 ...

6 Modelica的样本函数存在问题

我的问题可能很小! 我想在Modelica中对信号进行采样,众所周知,它为该函数提供了一个内置函数,称为“采样”。 因此,当我尝试使用以下算法时,会弹出一个错误消息,提示“尝试将非函数样本作为函数调用” 。 我错过了什么还是在这里做错了什么? algorithm if sample ...

7 我的函数存在问题:discord js的updateChannel

我希望您通过我创建的功能来寻求帮助,该功能允许刷新列表中的频道,但是我有一个问题,每隔10秒内存只会增加一次,而她从不清空自己。 我一直在寻找超过5个小时的时间,即使我认为这是一件愚蠢的事情,也要感谢您的提前帮助(抱歉翻译,我不是英语) 我的代码: ...

8 在函数中存在mmap问题

我试图编写一个其中包含mmap的函数,但是当我尝试从main()访问内存时,它会出现段错误。 有谁知道为什么吗? 请忽略MPI标头-用于项目的后半部分。 我已注释掉mprotect行,以查看它是一个mmap错误,而不是处理程序不一定有效 net_map.cpp: main ...

10 cMath和sin函数存在问题

嘿,所以我正在做一些图形数学运算,并将我认为是浮点数的东西( 我很确定我之前操纵浮点数的方式以某种方式弄乱了 ……)插入函数中,并得到了奇怪的负结果。 例如,当Angle最初等于350.0时进行以下操作时,测试最终会 -.99。 为什么? 尝试通过在所有操作无效之前放置(fl ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM