变量必须至少具有两个级别(R代码)

问题描述 投票:0回答:1

我的训练数据如下:

A   B   C   D
1   1   1   1
1   1   1   2
1   1   2   1
1   1   2   1
1   1   2   2
1   1   2   2
1   2   1   1
1   2   1   1
1   2   1   2
1   2   1   2
1   2   2   1
1   2   2   2
2   1   1   1
2   1   1   1
2   1   1   2
2   1   1   2
2   1   2   1
2   1   2   1
2   1   2   2
2   1   2   2
2   2   1   1
2   2   1   2
2   2   2   1
2   2   2   2
2   2   2   2

以及我的测试数据:

A   B   C   D
1   1   2   1
1   1   2   2
1   1   1   1
2   1   2   2

我使用以下方法进行拟合:

dag <- model2network("[A][B][C|A:B][D|A:B:C]")
training <- bn.fit(dag, trainingData, method = "mle", keep.fitted = TRUE)

而且我正在尝试使用以下方法预测D列的值:

predicted = predict(training, node = "D", data = testData,  method = "parents", prob = FALSE)

但是我得到了错误

check.data(data,allow.levels = TRUE)中的错误:变量B必须至少有两个级别。

我该如何解决?我认为测试数据不需要具有包含在训练数据中的所有级别-实际上,即使测试数据仅具有一个实例,也不应该能够进行预测吗?

r bayesian bayesian-networks bnlearn
1个回答
0
投票

由于您的变量都被编码为factor,因此它们“具有”因子水平列表。创建training时,在B列中具有12,并且因子级别(隐式在后台)设置为c(12)。但是,当您创建testData时,您在B列中只有1,并且因子级别(隐式地在后台)被设置为仅1

我们可以通过明确声明trainign$B具有级别c(1, 2)来解决此问题,即使在数据中仅出现1

trainign$B <- factor(training$B, levels=c(1, 2))
© www.soinside.com 2019 - 2024. All rights reserved.