目的
为了更好的熟悉分析定性变量的逻辑斯谛回归分析的应用和验证集法(评估拟合拟合模型的一种方法),用一个简单的示例来介绍一下它们在分析数据中的应用。
题目
在 Default 数据集上用income 和 balance 做逻辑斯谛回归来预测 default的概率。现在要用验证集方法来估计这个逻辑斯谛回归模型的测试错误率。在分析之前不要忘记设置一个随机种子。
(a) 拟合一个用income和 balance 来预测 default 的逻辑斯谛回归模型。
(b) 用验证集方法,估计这个模型的测试错误率。步骤如下:
i .把样本集分为一个训练集和一个验证袋。
ii. 只用训练集的观测来拟合一个多元逻辑斯谛回归模型。
iii. 计算每个个体违约的后验概率,如果后验概率大于 0.5 ,就将这个个体分到 default类,通过这种方法得到验证集中每 个个体是否违约的一个预测。
iV. 计算验证集错误率, 即验证集中被错误分类的观测所占的比例。
(c) 重复步骤 (b) 三次,用三种不同的分割把观测分为一个训练集和一个验证集。讨论得到的结果。
(d) 现在考虑一个用 income, balance 和一个哑变量 student 来预测 default 的概率的逻辑斯蒂回归模型。用验证集方法来估 计算这个模型的测试错误率。讨论包括哑变量 student 对于减小测试错误率是否有影响。
扩展资料:
关于逻辑斯谛回归分析的原理以及运用,读者可以参考博文
验证集法,这种方法首先随机地 把可获得的观测集分为两部分:一个训练集和一个验证集 或者说保留集 。模型在训练集上拟合,然后用拟合的模型来预测验证集中观测的响应变量。最后得到的验证集错误率--通常用均方误差作为定量响应变量的误差度量 —— 提供了对于测试错误率的一个估计。
训练
library(ISLR)
summary(Default)
attach(Default)
default student balance income
No :9667 No :7056 Min. : 0.0 Min. : 772
Yes: 333 Yes:2944 1st Qu.: 481.7 1st Qu.:21340
Median : 823.6 Median :34553
Mean : 835.4 Mean :33517
3rd Qu.:1166.3 3rd Qu.:43808
Max. :2654.3 Max. :73554
上面列出了Default数据集中的一些统计信息。数据集中default(是否违约) 违约人:9667,未违约人:333人。上面的default变量也是响应变量,其余变量均为预测变量。学生和非学生人数统计、balance(信贷余额)[最大、最小、均值、中位数]、income(收入)[最大、最小、均值、中位数].
#用数据集Default拟合逻辑斯谛回归模型
set.seed(1)
glm.fit = glm(default ~ income + balance, data = Default, family = binomial)
glm函数介绍:
glm(formula, family=family.generator, data,control = list(...))
family:每一种响应分布(指数分布族)允许各种关联函数将均值和线性预测器关联起来。
常用的family:
binomal(link='logit') ----响应变量服从二项分布,连接函数为logit,即logistic回归
binomal(link='probit') ----响应变量服从二项分布,连接函数为probit
poisson(link='identity') ----响应变量服从泊松分布,即泊松回归
control:控制算法误差和最大迭代次数
glm.control(epsilon = 1e-8, maxit = 25, trace = FALSE)
-----maxit:算法最大迭代次数,改变最大迭代次数:control=list(maxit=100)
FiveB = function() {
# .把样本集分为一个训练集和一个验证袋。
train = sample(dim(Default)[1], dim(Default)[1]/2)
# 只用训练集的观测来拟合一个多元逻辑斯谛回归模型。
glm.fit = glm(default~income+balance, data=Default, family=binomial,subset=train)
# 计算每个个体违约的后验概率,如果后验概率大于 0.5 ,就将这个个体分到 default类,通过这种方法得
# 到验证集中每个个体是否违约的一个预测。
glm.pred = rep("No", dim(Default)[1]/2)
glm.probs = predict(glm.fit, Default[-train,], type="response")
glm.pred[glm.probs>.5] = "Yes"
# 计算验证集错误率, 即验证集中被错误分类的观测所占的比例。
return(mean(glm.pred != Default[-train,]$default))
}
FiveB()
2.64% test error rate, with student dummy variable. Using the validation set
approach, it doesn't appear adding the student dummy variable leads to a reduction in the test error rate.
测试误差率为2.64%,带有虚拟变量student。 使用验证集这种方法,似乎不添加Student虚拟变量会导致测试错误率降低。
FiveB()
FiveB()
FiveB()
[1] 0.0274
[1] 0.0244
[1] 0.0244
从以上结果,分析得到这个拟合出的模型平均测试错误率约为2.6%。
#用income, balance 和一个哑变量 student 来预测 default 的概率的逻辑斯蒂回归模型。用验证集方法来#估计算这个模型的测试错误率。讨论包括哑变量 student 对于减小测试错误率是否有影响。
train = sample(dim(Default)[1], dim(Default)[1]/2)
glm.fit = glm(default~income+balance+student, data=Default, family=binomial,subset=train)
glm.pred = rep("No", dim(Default)[1]/2)
glm.probs = predict(glm.fit, Default[-train,], type="response")
glm.pred[glm.probs>.5] = "Yes"
mean(glm.pred != Default[-train,]$default)
#[1] 0.0278
从以上可以看出带有虚拟变量student,测试误差率为2.64%,而且似乎不添加student虚拟变量会导致测试错误率降低。