如何使用for循环将线性回归结果(变量名,p_value)放入数据框?

How to put linear regression results (variable name, p_value) into a dataframe using for loop?

我有 1 个目标变量和数百个预测变量。我正在尝试一次对一个预测变量进行 运行 线性回归,然后使用 for 循环创建一个数据框来保存所有单变量线性回归结果(即 - 变量名称,p_value)。

这是我在 python 中的回归代码(X_data 具有所有预测变量,y_data 具有目标变量:

import statsmodels.api as sm
for column in X_Data:
    exog = sm.add_constant(X_data[column],prepend = False)
    mod = sm.OLS(y_data, exog)
    res = mod.fit()
    print(column, ' ', res.pvalues[column])

打印结果如下:

variable1 0.003
variable2 0.3

...

如何创建 pandas 数据框来保存所有 p_value 结果?

您可以在循环之前初始化一个空容器,比如 dict,然后填充它并在之后构造 DataFrame。

d = {}
for column in X_Data:
    exog = sm.add_constant(X_data[column],prepend = False)
    mod = sm.OLS(y_data, exog)
    res = mod.fit()
    d[column] = res.pvalues[column])

df = pd.DataFrame.from_dict(d, orient='index', columns=['pval'])
#            pval
#variable1  0.003
#variable2  0.300

如果您需要存储多条信息(系数、置信区间、标准误差...),那么您的 dict 可以为每个键存储 dict 个属性。

d = {}
for column in X_Data:
    ...
    d[column] = {'pval': res.pvalues[column], 'other_feature': ...}

print(d)
#{'variable1': {'pval': 0.003, 'other_feature': 'XX'}, 
# 'variable2': {'pval': 0.300, 'other_feature': 'YY'}}

df = pd.DataFrame.from_dict(d, orient='index')
#            pval  other_feature
#variable1  0.003             XX
#variable2  0.300             YY

为此,您可以将应用与 lambda 函数结合使用。

X_Data['Prediction'] = X_Data.apply(lambda x: sm.OLS(y_data,x))