结构化中的bnlearn错误

时间:2017-12-25 16:22:43

标签: bayesian bnlearn

我尝试在" bnlearn"中使用structural.em时遇到错误包 这是代码:

cut.learn<- structural.em(cut.df, maximize = "hc", 
+               maximize.args = "restart",
+               fit="mle", fit.args = list(),
+               impute = "parents", impute.args = list(), return.all = FALSE,
+               max.iter = 5, debug = FALSE)
  

check.data出错(x,allow.levels = TRUE,allow.missing = TRUE,   warn.if.no.missing = TRUE,:至少有一个变量没有被观察到   值。

有没有人遇到同样的问题,请告诉我如何修复它。 谢谢。

1 个答案:

答案 0 :(得分:1)

我正在使用structural.em。我目前正在使用python接口来bnlearn,我称之为pybnl。我还遇到了您以上提到的问题。

这是一个Jupyter笔记本,展示了如何使用python marks中的StructuralEM。

第135页上的slides-bnshort.pdf,“重述了MARKS示例”中对此进行了介绍。

您必须手动创建带有初始估算的数据框的初始拟合,然后像这样提供对structural.em的参数(ldmarks是潜在离散标记数据框,其中LAT列仅包含丢失/ NA值):

library(bnlearn)
data('marks')
dmarks = discretize(marks, breaks = 2, method = "interval")
ldmarks = data.frame(dmarks, LAT = factor(rep(NA, nrow(dmarks)), levels = c("A", "B")))

imputed = ldmarks
# Randomly set values of the unobserved variable in the imputed data.frame
imputed$LAT = sample(factor(c("A", "B")), nrow(dmarks2), replace = TRUE)

# Fit the parameters over an empty graph
dag = empty.graph(nodes = names(ldmarks))
fitted = bn.fit(dag, imputed)
# Although we've set imputed values randomly, nonetheless override them with a uniform distribution
fitted$LAT = array(c(0.5, 0.5), dim = 2, dimnames = list(c("A", "B")))

# Use whitelist to enforce arcs from the latent node to all others
r = structural.em(ldmarks, fit = "bayes", impute="bayes-lw", start=fitted, maximize.args=list(whitelist = data.frame(from = "LAT", to = names(dmarks))), return.all = TRUE)  

您必须使用bnlearn 4.4-20180620或更高版本,因为它可以修复底层估算函数中的错误。