5

基于给定的网络结构,我为六个二进制变量(x1 到 x6)创建了一个包含 100 个实例的数据框。因此,它是一个 100 x 6 的 0/1 值数据帧,存储在变量“input_params”中。使用语句创建了一个空图:

library(bnlearn) bn_graph = empty.graph(names(input_params))

但是当我尝试在网络中使用上述参数('input_params')

bn_nw <- bn.fit(bn_graph, input_params)

我收到一条错误消息
Error in data.type(x) : variable x1 is not supported in bnlearn (type: integer).

我应该做什么样的数据类型转换来避免这个错误?现在它的值是 0 或 1。

4

2 回答 2

2

bn.fit()包中的函数bnlearn计算每个变量的局部条件概率分布。

在离散情况下,我们期望categorical因子函数)参数(在列中"fac1","fac2","fac3"):
fac_cols <- c("fac1","fac2","fac3")

是连续的数据(例如来自传感器的测量值),数据需要是类型numeric数值函数):
num_cols <- c("num1","num2","num3")

假设input_params是一个 data.frame,我们需要通过以下任一方式转换两组列 ( fac_cols, num_cols):

input_params[,fac_cols] <- lapply(input_params[,fac_cols], as.factor)
input_params[,num_cols] <- lapply(input_params[,num_cols], as.numeric)

或与dplyr

input_params <- input_params %>% mutate_at(vars(fac_cols), funs(as.factor)) %>% mutate_at(vars(num_cols), funs(as.numeric))
于 2020-04-01T17:18:05.713 回答
0

您需要将定性变量名称更改为一个字符,例如,您有一个变量名称 Age,类别为 young、adult、old。现在将子组的名称更改为 y,a,o 我有一个像你这样的问题并解决了

于 2021-11-15T09:11:08.313 回答