【问题标题】:BNlearn R error “variable Variable1 must have at least two levels.”BNlearn R错误“变量Variable1必须至少有两个级别。”
【发布时间】:2019-03-01 23:04:44
【问题描述】:

尝试使用 BNlearn 创建 BN,但我不断收到错误消息;

Error in check.data(data, allowed.types = discrete.data.types) : variable Variable1 must have at least two levels.

它给了我每个变量的错误,即使它们都是因素并且有超过 1 个级别,如您所见 - 在这种情况下,我的变量“模型”有 4 个级别

由于我无法共享变量和数据集,因此我创建了一个小集和属于数据集的代码。我遇到同样的问题。我知道我只共享了 2 个变量,但所有变量都出现相同的错误。

library(tidyverse)
library (bnlearn)
library(openxlsx)

DataFull <- read.xlsx("(.....)/test.xlsx", sheet = 1, startRow = 1, colNames = TRUE)
set.seed(600)
DataFull <- as_tibble(DataFull)

DataFull$Variable1 <- as.factor(DataFull$Variable1)
DataFull$TargetVar <- as.factor(DataFull$TargetVar)

DataFull <- na.omit(DataFull)
DataFull <- droplevels(DataFull)

DataFull <- DataFull[sample(nrow(DataFull)),]
Data <- DataFull[1:as.integer(nrow(DataFull)*0.70)-1,]
Datatest <- DataFull[as.integer(nrow(DataFull)*0.70):nrow(DataFull),]
nrow(Data)+nrow(Datatest)==nrow(DataFull)

FocusVar <- as.character("TargetVar")
BN.naive <- naive.bayes(Data, FocusVar) 

使用str(data),我可以看到变量已经有2个或更多级别:

str(数据)

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   27586 obs. of  2 variables:
 $ Variable1: Factor w/ 3 levels "Small","Medium",..: 2 2 3 3 3 3 3 3 3 3 ...
 $ TargetVar: Factor w/ 2 levels "Yes","No": 1 1 1 1 1 1 2 1 1 1 ...

数据集链接:https://drive.google.com/open?id=1VX2xkPdeHKdyYqEsD0FSm1BLu1UCtOj9eVIVfA_KJ3g

【问题讨论】:

    标签: r bnlearn


    【解决方案1】:

    bnlearn 需要 data.frame :不适用于 tibbles,因此通过省略 DataFull &lt;- as_tibble(DataFull) 行将数据保留为 data.frame

    例子

    library(tibble)
    library (bnlearn)
    
    d <- as_tibble(learning.test)
    hc(d)
    

    check.data(x) 中的错误:变量 A 必须至少有两个级别。

    特别是来自bnlearn:::check.data的行

    if (nlevels(x[, col]) < 2) 
          stop("variable ", col, " must have at least two levels.")
    

    在标准中 data.frame,learning.test[,"A"] 返回一个向量,因此 nlevels(learning.test[,"A"]) 按预期工作,但是,根据设计,您不能从 tibbles 提取这样的向量:d[,"A"]) 仍然是 tbl_df而不是向量,因此nlevels(d[,"A"]) 不能按预期工作,并返回零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2021-05-13
      • 1970-01-01
      • 2019-06-29
      • 2012-11-05
      • 2019-09-22
      相关资源
      最近更新 更多