本文介绍了R中的加权Logistic回归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给定成功率的样本数据加上样本量和自变量,我在R中尝试Logistic回归。
下面的代码做了我想要的事情,似乎给出了合理的结果,但看起来不像是合理的方法;实际上它使数据集的大小翻了一番
datf <- data.frame(prop = c(0.125, 0, 0.667, 1, 0.9),
cases = c(8, 1, 3, 3, 10),
x = c(11, 12, 15, 16, 18))
datf2 <- rbind(datf,datf)
datf2$success <- rep(c(1, 0), each=nrow(datf))
datf2$cases <- round(datf2$cases*ifelse(datf2$success,datf2$prop,1-datf2$prop))
fit2 <- glm(success ~ x, weight=cases, data=datf2, family="binomial")
datf$proppredicted <- 1 / (1 + exp(-predict(fit2, datf)))
plot(datf$x, datf$proppredicted, type="l", col="red", ylim=c(0,1))
points(datf$x, datf$prop, cex=sqrt(datf$cases))
的图表这看起来相当合理。
但我不喜欢使用datf2
作为一种通过复制数据来区分成功和失败的方法。有必要这样做吗?
作为一个次要的问题,有没有更干净的方法来计算预测的比例?
推荐答案
不需要像那样构造人工数据;glm
可以根据给定的数据集匹配您的模型。
> glm(prop ~ x, family=binomial, data=datf, weights=cases)
Call: glm(formula = prop ~ x, family = binomial, data = datf, weights = cases)
Coefficients:
(Intercept) x
-9.3533 0.6714
Degrees of Freedom: 4 Total (i.e. Null); 3 Residual
Null Deviance: 17.3
Residual Deviance: 2.043 AIC: 11.43
您将收到有关"Non-Integer#Success"的警告,但这是因为glm
是愚蠢的。与您构建的数据集上的模型进行比较:
> fit2
Call: glm(formula = success ~ x, family = "binomial", data = datf2,
weights = cases)
Coefficients:
(Intercept) x
-9.3532 0.6713
Degrees of Freedom: 7 Total (i.e. Null); 6 Residual
Null Deviance: 33.65
Residual Deviance: 18.39 AIC: 22.39
回归系数(因此预测值)基本相等。但是,您的剩余偏差和AIC值得怀疑,因为您已经创建了人工数据点。
这篇关于R中的加权Logistic回归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!