2017-04-13 208 views
0

我有这个问题。我正在尝试做线性回归并测试斜率。 t检验检查斜率是否远离0.斜率可以是负值也可以是正值。我只对负斜率感兴趣。线性回归的单侧t检验?

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

而我该如何改变,说99%的置信度或95%或......?对于双向t检验

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) 
+0

我投票结束这个问题作为题外话,因为这不是一个Python问题,而是一个统计数据。属于[CrossValidated](http://stats.stackexchange.com/) – MSalters

+2

这是一个关于编程的问题。 statsmodels目前不支持模型结果中的单向t_test。 – user333700

回答

3

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 

,因为你有兴趣在左只有尾巴。

对于置信区间,你只需要通过阿尔法参数:

regression_results.conf_int(alpha=0.01) 

了99%的置信区间。

+2

最好使用t.sf而不是1-cdf,因为它在右侧尾部的精度更高,并且可以小于浮点数epsilon。 – user333700

+0

太棒了!你是我的救星! :) ........ 一个问题,如果我对右尾感兴趣,我该怎么做?左尾是什么,是负斜率?而右尾是正斜率? ....... 只是为了确认,“ss.t.cdf(regression_results.tvalues [0],df)”为我提供了负斜率的P值吗? ....... alpha = 0.1是单侧测试的10%置信水平?...... t.sf的语法如何? –

+0

@ user333700谢谢,我不知道。让我更新。 – ayhan