逐步回归是一种用于选择对回归模型有显著影响的自变量的方法。在Python中,可以使用`statsmodels`库来实现逐步回归。以下是逐步回归的基本步骤和代码示例:
步骤
前向选择(Forward Selection)
从一个变量都没有开始,逐个将变量加入到模型中,直到没有可以再加入的变量为止。
每次引入一个变量后,检查该变量是否显著,如果显著则保留,否则忽略。
后向消除(Backward Elimination)
初始时包含所有变量,然后逐个尝试移除变量,每次移除后检查模型是否显著,如果不显著则移除,否则保留。
双向选择(Bidirectional Elimination)
结合前向和后向选择的方法,首先使用前向选择引入变量,然后使用后向选择移除不显著的变量。
代码示例
import pandas as pdimport numpy as npimport statsmodels.api as smdef stepwise_select(data, label, cols_all, method='forward'):"""data: 数据源,dflabel: 标签,strcols_all: 逐步回归的全部字段method: 方法,'forward', 'backward', 'both'return: select_col: 最终保留的字段列表,listsummary: 模型参数 AIC: aic"""import statsmodels.api as smif method == 'forward':add_col = []AIC_None_value = np.infwhile 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.aicbest_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`库进行前向逐步回归。类似地,你可以根据需求选择后向或双向逐步回归方法。

