Односторонний 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)

person Orvar Korvar    schedule 13.04.2017    source источник
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что это вопрос не о Python, а о статистике. Это относится к CrossValidated.   -  person MSalters    schedule 13.04.2017
comment
Это вопрос о программировании. statsmodels в настоящее время не поддерживает односторонний t_test в результатах модели.   -  person Josef    schedule 13.04.2017


Ответы (1)


p-значение для двустороннего t-критерия рассчитывается по формуле:

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% доверительного интервала.

person ayhan    schedule 13.04.2017
comment
Лучше использовать t.sf вместо 1-cdf, потому что он имеет большую точность в правом хвосте и может быть меньше, чем float epsilon. - person Josef; 13.04.2017
comment
Большой!!!! Вы мой спаситель!!! :) ........ Вопрос, если меня интересует правый хвост, как мне это сделать? А что такое левый хвост, отрицательный наклон? А правый хвост положительный наклон? ....... Просто чтобы подтвердить, ss.t.cdf(regression_results.tvalues[0],df) дает мне значение P для отрицательного наклона? ....... альфа = 0,1 - это 10% уровень достоверности для одностороннего теста? ...... как синтаксис для t.sf? - person Orvar Korvar; 13.04.2017
comment
@ user333700 Спасибо, я этого не знал. Позвольте мне обновить. - person ayhan; 13.04.2017
comment
@OrvarKorvar Да, значение p для одностороннего теста. Для правого хвоста вы должны изменить его на `1 - ss.t.cdf` Но, как заметил пользователь 333700, вы можете заменить его функцией выживания (например, ss.t.sf(regression_results.tvalues[0], df)) - person ayhan; 13.04.2017
comment
Расчет p-значения @OrvarKorvar не зависит от значения альфа. Когда вы сравниваете p с альфой, вы используете его. Таким образом, значение p одинаково для альфа = 0,05 и альфа = 0,1. Что касается доверительного интервала, он всегда двусторонний (хотя вы можете просто посмотреть на нижнюю границу). - person ayhan; 13.04.2017
comment
Когда я делаю ss.t.sf(...), я получаю другой результат, чем ss.t.cdf(...). Разница очень большая, 0,05 вместо 0,98. Почему это? PS. Бана кизартма вер! - person Orvar Korvar; 13.04.2017
comment
ss.t.sf(...) эквивалентно 1 - ss.t.cdf(...). Для правого хвоста. Хочешь картошки? :) - person ayhan; 13.04.2017
comment
Пользователь 333700 выше написал, что statsmodels не поддерживает односторонние t-тесты. Вы знаете другую библиотеку, которая его поддерживает? Я бы предпочел простую библиотеку со всем включенным, которая не использует громоздкие обходные пути. Какую библиотеку вы бы использовали? Таби, бана доматес, патликан, салаталик вер! Гель, гель далга гецелем. (Мой турецкий очень плохой, если вы еще не поняли) - person Orvar Korvar; 17.04.2017
comment
@OrvarKorvar Насколько мне известно, statsmodels — это наиболее полный пакет для логического статистического анализа в Python. Однако вы можете получить лучшую поддержку в R. Türkçen gayet iyi, sadece emin olamamıştım. :) - person ayhan; 19.04.2017