逐步回归是一种用于选择对回归模型有显著影响的自变量的方法。在Python中,可以使用`statsmodels`库来实现逐步回归。以下是逐步回归的基本步骤和代码示例:
步骤
前向选择(Forward Selection)
从一个变量都没有开始,逐个将变量加入到模型中,直到没有可以再加入的变量为止。
每次引入一个变量后,检查该变量是否显著,如果显著则保留,否则忽略。
后向消除(Backward Elimination)
初始时包含所有变量,然后逐个尝试移除变量,每次移除后检查模型是否显著,如果不显著则移除,否则保留。
双向选择(Bidirectional Elimination)
结合前向和后向选择的方法,首先使用前向选择引入变量,然后使用后向选择移除不显著的变量。
代码示例
import pandas as pd
import numpy as np
import statsmodels.api as sm
def stepwise_select(data, label, cols_all, method='forward'):
"""
data: 数据源,df
label: 标签,str
cols_all: 逐步回归的全部字段
method: 方法,'forward', 'backward', 'both'
return: select_col: 最终保留的字段列表,list
summary: 模型参数 AIC: aic
"""
import statsmodels.api as sm
if method == 'forward':
add_col = []
AIC_None_value = np.inf
while cols_all:
AIC = {}
for col in cols_all:
X_col = add_col.copy()
X_col.append(col)
X = sm.add_constant(data[X_col])
y = data[label]
LR = sm.Logit(y, X).fit()
AIC[col] = LR.aic
best_col = min(AIC, key=AIC.get)
if AIC[best_col] < AIC_None_value:
AIC_None_value = AIC[best_col]
add_col.append(best_col)
else:
cols_all.remove(best_col)
return add_col, AIC
示例数据
data = pd.DataFrame({
'x1': [1, 2, 3, 4, 5],
'x2': [2, 4, 6, 8, 10],
'x3': [3, 6, 9, 12, 15],
'y': [0, 1, 0, 1, 0]
})
调用函数
selected_cols, aic = stepwise_select(data, 'y', data.columns.tolist(), method='forward')
print("Selected columns:", selected_cols)
print("AIC:", aic)
解释
`stepwise_select`函数接受数据源、标签、所有可能的字段和方法作为参数。
根据所选择的方法('forward', 'backward', 'both'),函数会逐步添加或删除变量。
在前向选择中,函数会找到每次添加后AIC最小的变量并添加到模型中。
函数返回最终保留的字段列表和模型的AIC值。
以上代码示例展示了如何使用`statsmodels`库进行前向逐步回归。类似地,你可以根据需求选择后向或双向逐步回归方法。