<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Непараметрические криетрии
Критерий | Одновыборочный | Двухвыборочный | Двухвыборочный (связанные выборки)
  ------------- | -------------|
  Знаков  | $\times$ | | $\times$ 
  Ранговый | $\times$  | $\times$ | $\times$
Перестановочный | $\times$  | $\times$ | $\times$ 
Mirrors as potential environmental enrichment for individually housed laboratory mice
(Sherwin, 2004)
Step1:  Загрузка данных
Step2:  Одновыборочные критерии
Step3:  Критерий знаков
$H_0\colon$ медиана доли времени, проведенного в клетке с зеркалом, равна 0.5
$H_1\colon$ медиана доли времени, проведенного в клетке с зеркалом, не равна 0.5
Step4:  Критерий знаковых рангов Вилкоксона
Step5:  Перестановочный критерий
$H_0\colon$ среднее равно 0.5
$H_1\colon$ среднее не равно 0.5
<ASSISTANT_TASK:>
Python Code:
import numpy as np
import pandas as pd
import itertools
from scipy import stats
from statsmodels.stats.descriptivestats import sign_test
from statsmodels.stats.weightstats import zconfint
%pylab inline
Explanation: Непараметрические криетрии
Критерий | Одновыборочный | Двухвыборочный | Двухвыборочный (связанные выборки)
  ------------- | -------------|
  Знаков  | $\times$ | | $\times$ 
  Ранговый | $\times$  | $\times$ | $\times$
Перестановочный | $\times$  | $\times$ | $\times$ 
Mirrors as potential environmental enrichment for individually housed laboratory mice
(Sherwin, 2004): 16 лабораторных мышей были помещены в двухкомнатные клетки, в одной из комнат висело зеркало. С целью установить, есть ли у мышей какие-то предпочтения насчет зеркал, измерялась доля времени, которое каждая мышь проводила в каждой из своих двух клеток.
End of explanation
mouses_data = pd.read_csv('mirror_mouses.txt', header = None)
mouses_data.columns = ['proportion_of_time']
mouses_data
mouses_data.describe()
pylab.hist(mouses_data.proportion_of_time)
pylab.show()
Explanation: Загрузка данных
End of explanation
print '95%% confidence interval for the median time: [%f, %f]' % zconfint(mouses_data)
Explanation: Одновыборочные критерии
End of explanation
print "M: %d, p-value: %f" % sign_test(mouses_data, 0.5)
Explanation: Критерий знаков
$H_0\colon$ медиана доли времени, проведенного в клетке с зеркалом, равна 0.5
$H_1\colon$ медиана доли времени, проведенного в клетке с зеркалом, не равна 0.5
End of explanation
m0 = 0.5
stats.wilcoxon(mouses_data.proportion_of_time - m0)
Explanation: Критерий знаковых рангов Вилкоксона
End of explanation
def permutation_t_stat_1sample(sample, mean):
    t_stat = sum(map(lambda x: x - mean, sample))
    return t_stat
permutation_t_stat_1sample(mouses_data.proportion_of_time, 0.5)
def permutation_zero_distr_1sample(sample, mean, max_permutations = None):
    centered_sample = map(lambda x: x - mean, sample)
    if max_permutations:
        signs_array = set([tuple(x) for x in 2 * np.random.randint(2, size = (max_permutations, 
                                                                              len(sample))) - 1 ])
    else:
        signs_array =  itertools.product([-1, 1], repeat = len(sample))
    distr = [sum(centered_sample * np.array(signs)) for signs in signs_array]
    return distr
pylab.hist(permutation_zero_distr_1sample(mouses_data.proportion_of_time, 0.5), bins = 15)
pylab.show()
def permutation_test(sample, mean, max_permutations = None, alternative = 'two-sided'):
    if alternative not in ('two-sided', 'less', 'greater'):
        raise ValueError("alternative not recognized\n"
                         "should be 'two-sided', 'less' or 'greater'")
    
    t_stat = permutation_t_stat_1sample(sample, mean)
    
    zero_distr = permutation_zero_distr_1sample(sample, mean, max_permutations)
    
    if alternative == 'two-sided':
        return sum([1. if abs(x) >= abs(t_stat) else 0. for x in zero_distr]) / len(zero_distr)
    
    if alternative == 'less':
        return sum([1. if x <= t_stat else 0. for x in zero_distr]) / len(zero_distr)
    if alternative == 'greater':
        return sum([1. if x >= t_stat else 0. for x in zero_distr]) / len(zero_distr)
print "p-value: %f" % permutation_test(mouses_data.proportion_of_time, 0.5)
print "p-value: %f" % permutation_test(mouses_data.proportion_of_time, 0.5, 10000)
Explanation: Перестановочный критерий
$H_0\colon$ среднее равно 0.5
$H_1\colon$ среднее не равно 0.5
End of explanation
<END_TASK>