我尝试在" 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,:至少有一个变量没有被观察到 值。
有没有人遇到同样的问题,请告诉我如何修复它。 谢谢。
答案 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或更高版本,因为它可以修复底层估算函数中的错误。