R中的pmml生成不正确的变量名

pmml in R generating improper variable names

我正在使用 R 中的 pmml 包为使用 glm 函数获得的逻辑回归模型生成 PMML,如下所示:

library(pmml)
var <- sample(c(1,2,3),100,replace = TRUE)
var_cat <- sample(c(1,2,3,4),100,replace = TRUE)
y <- sample(c(0,1),100,replace = TRUE)
df <- data.frame(y = as.factor(y),var = as.factor(var), var_cat = as.factor(var_cat))
model <- glm(y ~ ., data = df, family = binomial)
pmmlOutput <- pmml(model)

此 PMML 的 PPMatrix 部分如下所示:

<PPMatrix>
   <PPCell value="2" predictorName="var" parameterName="p1"/>
   <PPCell value="3" predictorName="var" parameterName="p2"/>
   <PPCell value="_cat2" predictorName="var" parameterName="p3"/>
   <PPCell value="2" predictorName="var_cat" parameterName="p3"/>
   <PPCell value="_cat3" predictorName="var" parameterName="p4"/>
   <PPCell value="3" predictorName="var_cat" parameterName="p4"/>
   <PPCell value="_cat4" predictorName="var" parameterName="p5"/>
   <PPCell value="4" predictorName="var_cat" parameterName="p5"/>
</PPMatrix>

第一个变量及其级别显示为 (var,2) 和 (var,3)。但是,第二个变量有两行,变量名称和级别在错误的位置分割。

不是得到 (var_cat,2),而是拆分成 (var,_cat2),如下突出显示:

<PPCell value="_cat2" predictorName="var" parameterName="p3"/>

这似乎只有在变量名重叠时才会发生(在本例中为 var 和 var_cat)。但是,如果只有 var_cat 变量存在,这就可以正常工作。

有人可以提出解决此问题的方法吗?

不幸的是,你是对的;你在 R 代码中发现了一个错误。

它有效地找到值的方式假定不同的变量 名字不是另一个的子串。

因为 varvar_catsubstring,你会得到这个错误。请注意 var_catcat 也可能会给您带来同样的问题。另一方面,var_cat1 而不是 var_cat2substring,所以应该可以。

目前,最简单的方法是只命名变量,以便 变量名不是另一个的子串。幸运的是我们正在计划 在接下来的几周内发布一个新版本,我将尝试包含一个修复程序 为此在该版本中。