我试图用函数 iamb(x) 和 gs(x) 创建贝叶斯网络。但它显示“check.data(x) 中的错误:变量 MFYield 必须至少有两个级别。”
这是我的代码,
bn[sapply(bn, is.character)] <- lapply(bn[sapply(bn, is.character)], as.factor)
attach(bn)
这是我的数据“bn”的样本:
str(bn)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 59 obs. of 42 variables:
$ MFYield : Factor w/ 2 levels "0","1": 1 1 1 1 2 1 1 1 1 1 ...
$ MWtA : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ MWtT : Factor w/ 2 levels "0","1": 2 2 2 2 1 2 2 2 2 2 ...
$ MClb : Factor w/ 2 levels "0","1": 2 2 2 2 2 1 1 1 1 1 ...
$ MPS : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ MTwU : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ MTwD : Factor w/ 2 levels "0","1": 1 1 1 1 1 2 2 2 2 2 ...
$ MTwDAgent: Factor w/ 2 levels "0","1": 1 1 1 1 1 2 2 2 2 2 ...
bn.iamb = iamb(bn)
当我尝试创建网络时,错误从这里开始。check.data(x) 中的错误:变量 MFYield 必须至少有两个级别。
我不确定是因为我的数据是 tibble 吗?小标题:59 x 42 当我检查时,它说:
nlevels("bn$MFYield")
[1] 0
class(bn)
[1] “tbl_df” “tbl” “data.frame”
is.factor(bn$MFYield)
[1] 对
所以,我认为我的数据已经是一个因素,但 R 无法检测到它已经有两个级别。我不明白,为什么?
我该如何解决?我是 R 的新手,请帮助我度过难关。
谢谢你。