问题描述
我正在尝试通过手动规范而不是数据来重现条件概率表的教程示例。我的问题是当尝试手动指定概率时,根据教程示例,它们的总和不等于 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 = Netball 和high_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 (将#修改为@)