Bnlearn:指定条件概率表

问题描述

我正在尝试通过手动规范而不是数据来重现条件概率表的教程示例。我的问题是当尝试手动指定概率时,根据教程示例,它们的总和不等于 1,因此会产生错误消息。

错误信息:

Error in check.dnode(dist[[node]],node = node):
  the probabilities provided for node high_hg do not form a valid conditional 
  probability distribution. 

具体来说,high_hg 的一个条件概率表如下所示:

Conditional probability table for high_hg

我想手动指定(不使用数据)这样的条件表,其中 high_hg (TRUE/FALSE) 的概率在 sport = Netballhigh_hc (正确)。

说明书规格

## Specify conditional probabilities for node "high_hc"
cp_high_hc <- matrix(c(0.6078431,0.3921569),ncol = 2,dimnames = list(NULL,c("FALSE","TRUE")))
cp_high_hc

## Specify conditional probabilities for node "sport"
cp_sport <- matrix(c(0.4509804,0.2156863,0.333333),ncol = 3,dimnames = 
list(NULL,c("Netball","Tennis","W_Polo")))
cp_sport

## Specify conditional probabilities for node "high_hg"
cp_high_hg <- as.numeric(c(1.00,0.0,"",0.8571429,0.1428571,0.2500,0.7500,1.00,0.00,0.0625,0.9375))
#cp_high_hg <- vector(mode="numeric")
cp_high_hg
dim(cp_high_hg) <-c(2,2,3)
dimnames(cp_high_hg) <-list("high_hg" = c("FALSE","TRUE"),"high_hc" = 
c("FALSE","sport" = c("Netball","W_Polo"))
cp_high_hg

## Specify network
net <- model2network("[high_hg][sport][high_hc]")

## Fit model
dfit <- custom.fit(net,dist = list(high_hc = cp_high_hc,sport = cp_sport,high_hg = cp_high_hg))

可以在此处找到原始示例: https://www.r-bloggers.com/2018/09/bayesian-network-example-with-the-bnlearn-package/

教程代码

(使用 DAAG 数据估计的条件概率表)

# Load libraries
library(DAAG)
library(visNetwork)

#View sample data
View(ais)

## Set up a discrete model
```{r}
# Set boolean variables (variables with two possible values)
ais$high_hc <- as.factor(ais$hc > median(ais$hc))
ais$high_hg <- as.factor(ais$hg > median(ais$hg))

# Create an empty graph
structure <- empty.graph(c("high_hc","high_hg","sport"))

# Set relationships manually
modelstring(structure) <- "[high_hc][sport][high_hg|sport:high_hc]"

# Plot network function
# Using the visNetwork package to plot the network because it looks very nice.
plot.network <- function(structure,ht = "400px"){
  nodes.uniq <- unique(c(structure$arcs[,1],structure$arcs[,2]))
  nodes <- data.frame(id = nodes.uniq,label = nodes.uniq,color = "darkturquoise",shadow = TRUE)

  edges <- data.frame(from = structure$arcs[,to = structure$arcs[,2],arrows = "to",smooth = TRUE,shadow = TRUE,color = "black")

  return(visNetwork(nodes,edges,height = ht,width = "100%"))
 }

# Observe structure
plot.network(structure)

# Fit model
ais.sub <- ais[ais$sport %in% c("Netball","W_Polo"),c("high_hc","sport")]
ais.sub$sport <- factor(ais.sub$sport)
bn.mod <- bn.fit(structure,data = ais.sub)

bn.mod

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...