对于简单模型(如线性或逻辑回归模型),我们经常直接在数据库中对数据进行分数评估。将所有系数从R正确地转移到SQL中始终有些棘手。我认为我可以为glm结果制作一些R到SQL的翻译。对于数值变量,这是相当简单明了的:
library(rpart)
fit <- glm(Kyphosis ~ ., data = kyphosis, family = binomial())
coefs <- fit$coef[2:length(fit$coef)]
expr <- paste0('1/(1 + exp(-(',fit$coef[1], '+', paste0('(',
coefs, '*', names(coefs), ')', collapse = '+'),')))')
print(expr)
a <- with(kyphosis, eval(parse(text = expr)))
b <- predict(fit, kyphosis, type = 'response')
names(b) <- NULL
all.equal(a, b)
生成的
expr
为:1/(1 + exp(-(-2.03693352129613+(0.0109304821420485*年龄)+(0.410601186932733*数量)+(-0.206510049753697*开始))))
。有没有办法让这个适用于
factor
变量?我想把因子放在case ... when ... then ... end
子句中。假设我们有以下模型:kyphosis$factor_variable <- rep(LETTERS[1:5],20)[1:81]
fit <- glm(Kyphosis ~ ., data = kyphosis, family = binomial())
我正在浏览fit
的结构,但没有看到任何有用的内容。唯一的选择是解析names(fit$coef)
吗?
case when X = 'Y' then 1 else 0 end as factor_variableY
。 - Tomas Greif