1

我正在使用 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 变量,这可以正常工作。

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

4

1 回答 1

1

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

它有效地查找值的方式假设不同的变量名称不是另一个变量的子字符串。

由于varis a substringof var_cat,您会收到此错误。请注意,var_cat并且cat也可能会给您带来同样的问题。另一方面,var_cat1is not a substringof var_cat2,所以应该可以。

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

于 2015-07-08T19:14:35.337 回答