【问题标题】:querygrain() problem with "length of 'dimnames' [1] not equal to array extent"“'dimnames' [1] 的长度不等于数组范围”的 querygrain() 问题
【发布时间】:2021-09-23 09:44:41
【问题描述】:

查看其他也遇到以下错误的人的答案

数组中的错误(值,dimnames = dn): 'dimnames' [1] 的长度不等于数组范围

我没有找到任何适用于我的帖子,因为我的数据不在数据框中,而是在我认为的图表中。任何人都知道为什么会发生这种情况?

我的代码如下

library(Rtools)
library(RBGL)
library(graph)
library(pcalg)
library(dplyr)
library(bnlearn)
library(Rgraphviz)
library(ggdag)
library(ggplot2)
library(ellipsis)
library(varhandle)
library(gRain)

P1 = 0.0940594059405941
P2 = 0.0033003300330033
P3 = 0.0214521452145215
P4 = 0.0602310231023102
P5 = 0.00907590759075908
P6 = 0.033003300330033
P7 = 0.0132013201320132
P8 = 0.765676567656766
P9 = 0.0808580858085809
P10 = 0.0115511551155116
P11 = 0.0585808580858086
P12 = 0.849009900990099
P13 = 0.0899339933993399
P14 = 0.0313531353135314
P15 = 0.00247524752475248
P16 = 0.876237623762376
P17 = 0.114686468646865
P18 = 0.0643564356435644
P19 = 0.0066006600660066
P20 = 0.814356435643564
P21 = 0.179042904290429
P22 = 0.820957095709571

ABCA9 = cptable(~ABCA9|BTNL9:IGSF10, values=c(P1,P2,P3,P4,P5,P6,P7,P8),levels=tf)
IGSF10 = cptable(~IGSF10|class, values=c(P9,P10,P11,P12),levels=tf)
class = cptable(~class|CD300LG, values=c(P13,P14,P15,P16),levels=tf)
CD300LG = cptable(~CD300LG|BTNL9, values=c(P17,P18,P19,P20),levels=tf)
BTNL9 = cptable(~BTNL9, values=c(P21,P22),levels=tf)
plist2 = compileCPT(list(ABCA9,IGSF10,class,CD300LG,BTNL9))

net1=grain(plist2)
par(mar=c(1,1,1,0))
plot(net1$dag)

当我尝试运行以下查询来查找概率时会出现问题:

querygrain(net1, nodes=c('ABCA9','IGSF10','BTNL9','CD300LG'),type=joint)
querygrain(net1, nodes=c('class', 'BTNL9','CD300LG'),type=conditional)

否则,如果我执行这样的查询,我不会收到任何错误:

querygrain(net1, nodes=c('class', 'CD300LG'),type=conditional)

我不认为这个错误只是因为我之前没有在我的贝叶斯图中指定那些特定的概率,因为在我的实践中,他们能够像我所做的那样执行查询而不会出错。

【问题讨论】:

  • 我无法重现错误——也就是说,所有查询都会执行——但是要运行你的示例,我必须添加 tf = c("t", "f") 并在 conditional 和 joint 周围加上引号,例如type="conditional"。我也只加载了gRain 和Rgraphviz,因为它们是您的示例唯一需要的包。
  • 问题是否在新的 R 会话中仍然存在,而不加载任何以前的工作区?如果存在版本问题,可能值得将sessionInfo() 的结果添加到您的问题中。
  • @user20650 有趣的是,错误不再重复。谢谢,我想重新启动 R 会话会有所帮助。

标签: r graph bayesian bayesian-networks


【解决方案1】:

只需要重新启动 R 会话并更改 tf = c("t", "f") ,这也是我为使其正常工作所做的。在我有 tf = c(1,0) 之前。

【讨论】:

  • 确实使用tf = c(1,0) 是错误的来源。尽管帮助页面中似乎没有提到这一点,但这些级别需要是字符。所以如果你真的想要0/1,你可以使用tf = c("1","0")
猜你喜欢
  • 1970-01-01
  • 2016-06-25
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多