用jupyter编写逐步回归代码
时间: 2023-08-04 11:38:38 浏览: 88
以下是使用Python编写逐步回归的代码:
```python
import pandas as pd
import numpy as np
import statsmodels.api as sm
# 读入数据
data = pd.read_csv('data.csv')
# 提取自变量和因变量
X = data.iloc[:, 1:-1]
y = data.iloc[:, -1]
# 添加常数列
X = sm.add_constant(X)
# 初始化模型
model = sm.OLS(y, X).fit()
# 逐步回归
while True:
# 计算当前模型的R-squared
rsq = model.rsquared_adj
# 记录当前模型的变量个数
num_vars = len(model.params) - 1
# 找到当前R-squared下的最佳变量
best_var = None
best_pval = np.inf
for var in X.columns[1:]:
# 如果该变量已经在模型中,则跳过
if var in model.params.index:
continue
# 将该变量加入模型并计算P值
temp_model = sm.OLS(y, X[list(model.params.index) + [var]]).fit()
pval = temp_model.pvalues[var]
# 如果P值更小,则更新最佳变量
if pval < best_pval:
best_var = var
best_pval = pval
# 如果没有更好的变量,则结束逐步回归
if best_var is None:
break
# 将最佳变量加入模型
model = sm.OLS(y, X[list(model.params.index) + [best_var]]).fit()
# 如果新模型的R-squared比原模型更低,则结束逐步回归
if model.rsquared_adj < rsq:
break
# 输出最终模型的结果
print(model.summary())
```
以上代码中,我们使用了statsmodels库中的OLS类来实现线性回归,使用add_constant函数添加常数列,用rsquared_adj属性计算R-squared。在每一轮逐步回归中,我们使用循环遍历每个未加入模型的变量,依次将其加入模型并计算P值,然后选择P值最小的变量作为最佳变量。最后,将最佳变量加入模型,并根据新模型的R-squared值来决定是否继续添加变量。
阅读全文