使用场景: 结果变量是类别型, 二值变量和多分类变量, 不满足正态分布
结果变量是计数型, 并且他们的均值和方差都是相关的
解决方法: 使用广义线性模型, 它包含费正太因变量的分析
1.Logistics 回归 (因变量为类别型)
案例: 匹配出发生婚外情的模型
1. 查看数据集的统计信息
- library(AER)
- data(Affairs,package = AER)
- summary(Affairs)
- table(Affairs$affairs)
结果: 该数据从 601 位参与者收集了, 婚外情次数, 性别, 年龄, 结婚年限, 是否有孩子, 宗教信仰, 教育背景, 职业, 婚姻的自我评价这 9 个变量
结果变量是婚外情发生的次数 72% 的夫妻没有婚外情, 最多的是一年中每月都有婚外情占 6%
2. 将结果值转换为二值型因子
- Affairs$ynaffair[Affairs$affairs > 0] <- 1
- Affairs$ynaffair[Affairs$affairs == 0] <- 0
- Affairs$ynaffair <- factor(Affairs$ynaffair,
- levels=c(0,1),
- labels=c("No","Yes"))
- table(Affairs$ynaffair)
3. 将该因子作为二值型变量的结果变量
- fit.full <- glm(ynaffair ~ gender + age + yearsmarried + children +
- religiousness + education + occupation +rating,
- data=Affairs,family=binomial())
- summary(fit.full)
结果: 性别, 是否有孩子, 学历和职业对模型不显著, 去除后进行分析
- fit.reduced <- glm(ynaffair ~ age + yearsmarried + religiousness +
- rating, data=Affairs, family=binomial())
- summary(fit.reduced)
3. 使用卡方检验来判断比较
1 anova(fit.reduced,fit.full,test = Chisq)
结果: p=0.21, 表示新模型的拟合更好
4. 解释模型参数
- coef(fit.reduced)
- exp(coef(fit.reduced))
结果: 婚龄每增加 1 岁, 婚外情发生的可能性将乘以 1.106, 相反年龄增加 1 岁, 婚外情发生的可能性乘以 0.9652
5. 评价婚姻评分对婚外情的影响
- # 1. 手动生成数据集
- # 2. 使用 predict 函数来进行预测
- testdata <- data.frame(rating=c(1,2,3,4,5),age=mean(Affairs$age),
- yearsmarried=mean(Affairs$yearsmarried),
- religiousness=mean(Affairs$religiousness))
- testdata
- testdata$prob <- predict(fit.reduced,newdata = testdata,type=response)
- testdata
结果: 当婚姻评分从 1(很不幸) 变成 5(很幸福) 的时候, 婚外情发生的概率从 0.53 降低到 0.15
6. 评价年龄对婚外情的影响
- testdata <- data.frame(rating=mean(Affairs$rating),
- age=seq(17,57,10),
- yearsmarried=mean(Affairs$yearsmarried),
- religiousness=mean(Affairs$religiousness))
- testdata$prob <- predict(fit.reduced,newdata = testdata,type=response)
- testdata
结果: 当其他变量不变时, 年龄从 17 到 57 岁, 婚外情的概率从 0.34 降低到 0.11
7. 判断是否过度离势
过度离势会导致标准误检验和不精确的显著性检验, 此时任然可以使用 gml() 拟合拟合 Logistics 回归, 但是把二项分布改为类二项分布
- # 如果结果接近 1, 表示没有过度离势
- deviance(fit.reduced)/df.residual(fit.reduced)
结果: 没有过度离势
2. 泊松回归 (因变量为计数型)
使用场景: 通过一系列连续型或类别型预测变量来预测计数型结果变量时采用泊松分布
案例: 药物治疗是否能减小癫痫的发病数
1. 查看数据集
- data(breslow.dat,package = robust)
- names(breslow.dat)
- summary(breslow.dat[c(6,7,8,10)])
结果: 我们分析年龄, 治疗条件, 前八周的发病次数和随机化后八周内的发病次数的关系, 所以只采用 4 个变量
2. 图形
- opar <- par(no.readonly = T)
- par(mfrow=c(1,2))
- attach(breslow.dat)
- hist(sumY,breaks = 20,xlab = Seizure Count,main = Distribution of Sizeture)
- boxplot(sumY~Trt,xlab=Treatment,main=Group Comparisons)
- par(opar)
结果: 可以看出使用药物的组, 癫痫的发病率有所减少
3. 拟合泊松回归
- fit <- glm(sumY~Base+Age+Trt,data = breslow.dat,family = poisson())
- summary(fit)
结果: 偏差, 回归参数, 标准误差和参数为 0 的检验
4. 解释模型参数
- coef(fit)
- exp(coef(fit))
结果: 年龄每增加 1 岁, 癫痫的发病数将乘以 1.023, 如果从安慰剂组调到药物组, 则发病率会减少 14%
5. 判断是否过度离势
1 deviance(fit)/df.residual(fit)
结果: 大于 1, 存在过度离势
6. 调整模型
- fit.new <- glm(sumY~Base+Age+Trt,data = breslow.dat,family = quasipoisson())
- summary(fit.new)
结果: 标准误差和第一次模型相比, 大了许多, 同时标准误差越大会导致 Trt 的 p 值大于 0.05, 所以并没有充分的证据表明药物治疗相对于使用安慰剂能够降低癫痫的发病次数
来源: http://www.bubuko.com/infodetail-2503633.html