import numpy as np
import pandas as pd

import scipy
from statsmodels.stats.weightstats import *

%pylab inline

"""
Explanation: Критерии Стьюдента
End of explanation
"""


data = pd.read_csv('ADHD.txt', sep = ' ', header = 0)
data.columns = ['Placebo', 'Methylphenidate']

data.plot.scatter('Placebo', 'Methylphenidate', c = 'r', s = 30)
pylab.grid()
pylab.plot(range(100), c = 'black')
pylab.xlim((20, 80))
pylab.ylim((20, 80))
pylab.show()

data.plot.hist()
pylab.show()

"""
Explanation: Treatment effects of methylphenidate
В рамках исследования эффективности препарата метилфенидат 24 пациента с синдромом дефицита внимания и гиперактивности в течение недели принимали либо метилфенидат, либо плацебо. В конце недели каждый пациент проходили тест на способность к подавлению импульсивных поведенческих реакций. На втором этапе плацебо и препарат менялись, и после недельного курса каждый испытуемые проходили второй тест.
Требуется оценить эффект применения препарата.
Pearson D.A, Santos C.W., Casat C.D., et al. (2004). Treatment effects of methylphenidate on cognitive functioning in children with mental retardation and ADHD. Journal of the American Academy of Child and Adolescent Psychiatry, 43(6), 677–685.
End of explanation
"""


stats.ttest_1samp(data.Placebo, 50.0)

print "95%% confidence interval: [%f, %f]" % zconfint(data.Placebo)

"""
Explanation: Одновыборочный критерий Стьюдента
Исходя из того, что способность к подавлению испульсивных поведенческих реакций измеряется по шкале [0, 100], можно предположить, что при хорошей калибровке теста средняя способоность к подавлению реакций в популяции составляет 50. Тогда для того, чтобы проверить гипотезу о том, что пациенты в выборке действительно в среднем хуже справляются с подавлением импульсивных реакций (нуждаются в лечении), давайте проверим, что их способность к подавлению реакций отличается от средней (не равна 50). 
$H_0\colon$ среднее значение способности к подавлению испульсивных поведенческих реакций равно 50.
$H_1\colon$ не равно.
End of explanation
"""


pylab.figure(figsize=(12,8))
pylab.subplot(2,2,1)
stats.probplot(data.Placebo, dist="norm", plot=pylab)
pylab.subplot(2,2,2)
stats.probplot(data.Methylphenidate, dist="norm", plot=pylab)
pylab.show()

"""
Explanation: Двухвыборочный критерий Стьюдента (независимые выборки)
Для того, чтобы использовать двухвыборочный критерий Стьюдента, убедимся, что распределения в выборках существенно не отличаются от нормальных.
End of explanation
"""


print "Shapiro-Wilk normality test, W-statistic: %f, p-value: %f" % stats.shapiro(data.Placebo)

print "Shapiro-Wilk normality test, W-statistic: %f, p-value: %f" % stats.shapiro(data.Methylphenidate)

"""
Explanation: Критерий Шапиро-Уилка:
$H_0\colon$ способности к подавлению импульсивных реакций распредлены нормально
$H_1\colon$ не нормально.
End of explanation
"""


scipy.stats.ttest_ind(data.Placebo, data.Methylphenidate, equal_var = False)

cm = CompareMeans(DescrStatsW(data.Methylphenidate), DescrStatsW(data.Placebo))
print "95%% confidence interval: [%f, %f]" % cm.tconfint_diff(usevar='unequal')

"""
Explanation: С помощью критерия Стьюдента проверим гипотезу о развенстве средних двух выборок.
Критерий Стьюдента:
$H_0\colon$ средние значения способности к подавлению испульсивных поведенческих реакций одинаковы для пациентов, принимавших препарат, и для пациентов, принимавших плацебо.
$H_0\colon$ не одинаковы.
End of explanation
"""


stats.probplot(data.Placebo - data.Methylphenidate, dist = "norm", plot = pylab)
pylab.show()

"""
Explanation: Двухвыборочный критерий Стьюдента (зависмые выборки)
Для того, чтобы использовать критерй Стьюдента для связанных выборок, давайте проверим, что распределение попарных разностей существенно не отличается от нормального.
End of explanation
"""


print "Shapiro-Wilk normality test, W-statistic: %f, p-value: %f" % stats.shapiro(data.Methylphenidate - data.Placebo)

"""
Explanation: Критерий Шапиро-Уилка:
$H_0\colon$ попарные разности распределены нормально.
$H_1\colon$ не нормально.
End of explanation
"""


stats.ttest_rel(data.Methylphenidate, data.Placebo)

print "95%% confidence interval: [%f, %f]" % DescrStatsW(data.Methylphenidate - data.Placebo).tconfint_mean()

"""
Explanation: Критерий Стьюдента:
$H_0\colon$ средние значения способности к подавлению испульсивных поведенческих реакций одинаковы для пациентов, принимавших препарат, и для пациентов, принимавших плацебо.
$H_1\colon$ не одинаковы.
End of explanation
"""


