全子集回归python
时间: 2023-10-15 20:06:43 浏览: 208
全子集回归是一种回归分析方法,它通过考虑所有可能的自变量子集来建立回归模型,并选择具有最优性能的模型。在Python中,可以使用statsmodels库来实现全子集回归。具体的代码实现可以参考以下示例:
```python
import pandas as pd
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
from itertools import combinations
def all_subset_regression(df):
list1 = [1, 2, 3] # 自变量的列数
n = 18 # 样本量
R2 = []
names = []
# 找到所有子集,并依次循环
for a in range(len(list1) + 1):
for b in combinations(list1, a):
p = len(list(b))
data1 = pd.concat([df.iloc[:, i - 1] for i in list(b)], axis=1) # 结合所需因子
name = "y~" + (" ".join(data1.columns)) # 组成公式
data = pd.concat([df['y'], data1], axis=1) # 结合自变量和因变量
result = smf.ols(name, data=data).fit() # 建模
# 计算R2a
r2 = (n - 1) / (n - p - 1)
r2 = r2 * (1 - result.rsquared**2)
r2 = 1 - r2
R2.append(r2)
names.append(name)
finall = {"公式": names, "R2a": R2}
data = pd.DataFrame(finall)
print("根据自由度调整复决定系数准则得到:")
print("最优子集回归模型为:{}".format(data.iloc[data['R2a'].argmax(), 0]))
print("其R2a值为:{}".format(data.iloc[data['R2a'].argmax(), 1]))
result = smf.ols(name, data=df).fit() # 建模
print()
print(result.summary())
df = pd.read_csv("data5.csv") # 根据实际情况读取数据
all_subset_regression(df)
```
阅读全文