如何从Python的OLSResults中获取变量的P值?

27

OLSResults 的结果

df2 = pd.read_csv("MultipleRegression.csv")
X = df2[['Distance', 'CarrierNum', 'Day', 'DayOfBooking']]
Y = df2['Price']
X = add_constant(X)
fit = sm.OLS(Y, X).fit()
print(fit.summary())

将每个属性的P值显示为只保留3位小数。

我需要提取每个属性(如DistanceCarrierNum等)的P值,并以科学计数法打印出来。

我可以使用fit.params [0]fit.params [1]等来提取系数。

需要获取所有P值的结果。

所有P值均为0代表什么意思?


4
请使用以下翻译:使用 dir(fit) 并查找可能的候选项。 - Josef
3个回答

26

要得到答案,您需要执行fit.pvalues[i],其中i是自变量的索引。例如,fit.pvalues[0]表示截距,fit.pvalues[1]表示Distance等。

您还可以使用dir(<object>)查找对象的所有属性。


1
由于pvalues是一个Pandas系列,您可以使用fit.pvalues.loc['Price']访问您想要的特定p值,例如“Price”。 - jedge
我正在使用statsmodel版本.13.5。返回的模型中没有pvalues属性... - Xin Niu
我刚刚意识到应该使用由model = sm.OLS返回的模型,而不是mod = model.summary()返回的模型。谢谢! - Xin Niu

6

不使用 fit.summary(),您可以在 for 循环中使用 fit.pvalues[attributeIndex] 来打印所有功能/属性的 p 值,如下所示:

df2 = pd.read_csv("MultipleRegression.csv")
X = df2[['Distance', 'CarrierNum', 'Day', 'DayOfBooking']]
Y = df2['Price']
X = add_constant(X)
fit = sm.OLS(Y, X).fit()
for attributeIndex in range (0, numberOfAttributes):
    print(fit.pvalues[attributeIndex])

==========================================================================

所有P值都为0是什么意思?

这可能是一个好的结果。每个参数的P值测试零假设,即系数(b1、b2、...、bn)等于零,对拟合方程y = b0 + b1x1 + b2x2...没有影响。较低的P值(小于0.05)表示您可以拒绝零假设。换句话说,P值较低的预测变量很可能是模型中有意义的新增因素,因为预测变量值的变化与响应变量(y)的变化相关联。

另一方面,更大的(不显著的)P值表明,预测变量的变化与响应变量的变化无关。


1

我曾使用过这个解决方案

df2 = pd.read_csv("MultipleRegression.csv")
X = df2[['Distance', 'CarrierNum', 'Day', 'DayOfBooking']]
Y = df2['Price']
X = add_constant(X)
model = sm.OLS(Y, X).fit()

# Following code snippet will generate sorted dataframe with feature name and it's p-value. 

# Hence, you will see most relevant features on the top (p-values will be sorted in ascending order)

d = {}
for i in X.columns.tolist():
    d[f'{i}'] = model_ols.pvalues[i]

df_pvalue= pd.DataFrame(d.items(), columns=['Var_name', 'p-Value']).sort_values(by = 'p-Value').reset_index(drop=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接