分类变量回归——Probit和Logit
为什么不是普通线性回归?
使用普通线性回归技术,我们必须确保回归技术对于研究问题的适用性,才能相信回归结果是可靠的。识别回归技术的适用性,我们需要对回归分析进行诊断,诊断内容是线性回归最基本的六个假设是否成立,即
- 误差项是一个期望为0的随机变量;
- 对于解释变量的所有观测值,随机误差项有相同的方差;
- 随机误差项彼此不相关;
- 解释变量是确定性变量,不是随机变量,与随机误差项彼此之间相互独立;
- 解释变量之间不存在精确的(完全的)线性关系,即解释变量的样本观测值矩阵是满秩矩阵;
- 随机误差项服从正态分布。
那么,当我们遇到被解释变量为分类变量这一特殊的情境时,如果能够使用普通线性回归技术,就必须要满足以上所提到的六个基本假设,我们来进行一个简单的模拟。
我使用一个火箭发射成功与否的数据集来进行接下来的测试,首先我们读取数据集。
import numpy as np
import pandas as pd
data = pd.read_csv("challenger.csv")
data.drop(columns=['Unnamed: 0'], inplace=True)
数据集如下:
num_at_risk distress launch_temp leak_check_pressure order
0 6 1 70 50 2
1 6 0 69 50 3
2 6 0 68 50 4
3 6 0 67 50 5
4 6 0 72 50 6
5 6 0 73 100 7
6 6 0 70 100 8
7 6 1 57 200 9
8 6 1 63 200 10
9 6 1 70 200 11
10 6 0 78 200 12
11 6 0 67 200 13
13 6 0 67 200 15
14 6 0 75 200 16
15 6 0 70 200 17
16 6 0 81 200 18
17 6 0 76 200 19
18 6 0 79 200 20
19 6 0 75 200 21
20 6 0 76 200 22
21 6 1 58 200 23
我们使用statsmodels提供的线性回归分析API来完成回归,然后进行简单的可视化
import statsmodels.formula.api as smf
model = smf.ols('distress ~ num_at_risk + launch_temp + leak_check_pressure + order', data = data)
result = model.fit()
# result.summary()
import matplotlib.pyplot as plt
plt.figure(figsize = (10, 8), dpi = 80)
plt.scatter(