2017-04-13 31 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