我有一个包含多个列的pandas数据框。我需要进行多元线性回归。在此之前,我想分析相对于因变量的每个自变量的R,R2,调整的R2和p值。 对于R和R2,我没有问题,因为我可以计算R矩阵并仅选择因变量,然后查看它与所有自变量之间的R系数。然后我可以将这些值平方以获得R2。 我的问题是如何对调整后的R2和p值做同样的事情 最后,我想要获得的就像那样:
Variable R R2 ADJUSTED_R2 p_value
A 0.4193 0.1758 ...
B 0.2620 0.0686 ...
C 0.2535 0.0643 ...
所有值都与因变量相关,假设为Y.
答案 0 :(得分:0)
以下内容不会给你所有答案,但它会让你使用python,pandas和statsmodels进行回归分析。
给定像这样的数据框......
# Imports
import pandas as pd
import numpy as np
import itertools
# A datafrane with random numbers
np.random.seed(123)
rows = 12
listVars= ['y','x1', 'x2', 'x3']
rng = pd.date_range('1/1/2017', periods=rows, freq='D')
df_1 = pd.DataFrame(np.random.randint(100,150,size=(rows, len(listVars))), columns=listVars)
df_1 = df_1.set_index(rng)
print(df_1)
...您可以使用statsmodels库获取任何回归结果,并在下面的代码段中更改result = model.rsquared
部分:
x = df_1['x1']
x = sm.add_constant(x)
model = sm.OLS(df_1['y'], x).fit()
result = model.rsquared
print(result)
现在你有了r平方。使用model.pvalues
作为p值。并使用dir(model)
仔细查看其他模型结果(输出中的内容比您在下面看到的更多):
现在,这可以让您获得所需的结果。 要获得所有变量/列组合的预期结果,问题和答案here应该会让您走得很远。
修改:您可以使用model.summary()
仔细查看一些常见的回归结果。与dir(model)
一起使用,您可以看到并非所有回归结果都与pvalues使用model.pvalues
的方式相同。例如,要获得Durbin-Watson,您必须使用durbinwatson = sm.stats.stattools.durbin_watson(model.fittedvalues, axis=0)
。
This post已获得有关该问题的更多信息。