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")
,但也没有给我二元回复。
答案 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上提问。