【问题标题】:One sided t-test for linear regression?线性回归的单边 t 检验?
【发布时间】:2017-09-09 10:55:40
【问题描述】:

我有这个问题。我正在尝试进行线性回归并测试斜率。 t 检验检查斜率是否远离 0。斜率可以是负数或正数。我只对负斜率感兴趣。

在这个例子中,斜率是正的,我不感兴趣,所以 P 值应该很大。但它很小,因为现在它测试斜率是否在任一方向上远离 0。 (我强制截距为零,这是我想要的)。有人可以帮我看看斜率是否只是负数。在这种情况下,P 值应该很大。

我该如何更改为 99% 置信水平或 95% 或...?

import statsmodels.api as sm
import matplotlib.pyplot as plt
import numpy
X = [-0.013459134, 0.01551033, 0.007354476, 0.014686473, -0.014274754, 0.007728445, -0.003034186, -0.007409397]
Y = [-0.010202462, 0.003297546, -0.001406498, 0.004377665, -0.009244517, 0.002136552, 0.006877126, -0.001494624]
regression_results = sm.OLS (Y, X, missing = "drop").fit ()
P_value = regression_results.pvalues [0]
R_squared = regression_results.rsquared
K_slope = regression_results.params [0]
conf_int = regression_results.conf_int ()
low_conf_int = conf_int [0][0]
high_conf_int = conf_int [0][1]
fig, ax = plt.subplots ()
ax.grid (True)
ax.scatter (X, Y, alpha = 1, color='orchid')
x_pred = numpy.linspace (min (X), max (X), 40)
y_pred = regression_results.predict (x_pred)
ax.plot (x_pred, y_pred, '-', color='darkorchid', linewidth=2)

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为这不是 Python 问题,而是统计问题。那属于CrossValidated
  • 这是一个关于编程的问题。 statsmodels 目前不支持模型结果中的单边 t_test。

标签: python pandas scikit-learn statsmodels t-test


【解决方案1】:

双向 t 检验的 p 值通过以下方式计算:

import scipy.stats as ss
df = regression_results.df_resid
ss.t.sf(regression_results.tvalues[0], df) * 2 # About the same as (1 - cdf) * 2.
# see @user333700's comment
Out[12]: 0.02903685649821508

您的修改将是:

ss.t.cdf(regression_results.tvalues[0], df)
Out[14]: 0.98548157175089246

因为您只对左尾感兴趣。

对于置信区间,你只需要传递 alpha 参数:

regression_results.conf_int(alpha=0.01)

对于 99% 的置信区间。

【讨论】:

  • 最好使用t.sf而不是1-cdf,因为它在右尾精度更高,并且可以小于float epsilon。
  • 太棒了!!!!你是我的救星!!! :) ........ 一个问题,如果我对右尾感兴趣,我该怎么做?什么是左尾,是负斜率吗?右尾是正斜率? ....... 只是为了确认一下,“ss.t.cdf(regression_results.tvalues[0],df)”给了我负斜率的 P 值? ....... alpha=0.1 是单侧测试的 10% 置信水平?...... t.sf 的语法如何?
  • @user333700 谢谢,我不知道。让我更新。
  • @OrvarKorvar 是的,单面测试的 p 值。对于右尾,您可以将其更改为 `1 - ss.t.cdf` 但正如 user333700 所述,您可以将其替换为生存函数(例如 ss.t.sf(regression_results.tvalues[0], df))
  • @OrvarKorvar p 值计算不依赖于 alpha 值。当您将 p 与 alpha 进行比较时,您将使用它。因此,对于 alpha=0.05 和 alpha=0.1,p 值相同。至于置信区间,它总是两条尾的(不过你可以看看下限)。
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2018-09-06
  • 1970-01-01
  • 2010-10-09
相关资源
最近更新 更多