R:如何确保glm模型的拟合值是二进制的

时间:2014-12-28 23:14:30

标签: r glm

 a = rnorm(10)
 b = rnorm(10)
 c = rnorm(10)
 status = c(rep(0, 5), rep(1, 5))
 status = as.factor(status)
 dat = data.frame(a, b, c, status)
 mod = glm(status~., dat, family = "binomial")

我有一个数据集,我的响应变量是一个二进制变量,即0代表控件,1代表大小写。当我调用mod$fit来查看拟合值时,它们不是二进制的。它们是数字的。如何确保拟合值是二进制的?我试过了as.factor(status),但这并不奏效。我也试过了predict(mod, test = data.frame(e = rnorm(10), f = rnorm(10), g = rnorm(10)), type = "response"),但也没有给我二元回复。

1 个答案:

答案 0 :(得分:4)

如果你想要二元回答,你需要决定一个截止值 - 这根本不是微不足道的(有关于ROC [接收者 - 操作者曲线]的整个统计学文献以及敏感性和特异性之间的权衡),但是合理的默认选项是选择0.5。

数据:

 dat <- data.frame(a = rnorm(10),
                  b = rnorm(10),
                  c = rnorm(10),
                  status = factor(rep(0:1, each=5)))
 mod <- glm(status~., dat, family = "binomial")

二分法:

 f <- fitted(mod) ## or predict(mod,type="response")
 bf <- ifelse(f<0.5,0,1)  ## or as.numeric(f<0.5)

如果您对统计/非编程方面有更多疑问,最好在CrossValidated上提问。