我在R中使用pmml包来生成使用glm函数获得的Logistic回归模型的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变量,则可以正常工作。
有人可以提出解决此问题的方法吗?
答案 0 :(得分:1)
不幸的是,你是对的;你在R代码中发现了一个错误。
它有效地找到值的方式假设不同的变量 名称不是另一个的子串。
由于var
是substring
的{{1}},您会收到此错误。请注意,var_cat
和var_cat
也可能会给您带来同样的问题。另一方面,cat
不 var_cat1
substring
,因此应该有效。
目前,最简单的方法是将变量命名为a 变量名不是另一个的子串。幸运的是我们正在计划 在接下来的几周内发布一个新版本,我将尝试包含一个修复程序 在那个版本中为此。