import os

def create_folder():
    if os.path.exists("pytemp"):
        pass
    else:
        os.mkdir("pytemp")

def download_ftp(local, filename):
    create_folder()
    from ftplib import FTP
    ftp = FTP('83.220.175.101')
    ftp.login("terver", 'qwerty1')
    ftp.cwd('files/')
    with open('./pytemp/' + local, 'wb') as fp:
        ftp.retrbinary('RETR ' + filename, fp.write)
    return './pytemp/' + local

def teor():
    names = ['1) задание 5-6',
            '2) задание 4_1',
            '3) задание 4_2',
            '4) q3'
            ]

    lectures = {
        "1": "kate/Zadanie_5-6_Katya.pdf",
        "2": "kate/Zadanie_4_Katya_1.pdf",
        "3": "kate/Zadanie_4_Katya_2.pdf",
        "4": "kate/Q3_Katya.pdf",
    }

    for i in names:
        print(i)

    lec = input("Номер: ")

    filepath = download_ftp('v'+lec+".pdf", lectures[lec])

    from IPython.display import IFrame, display
    return IFrame(filepath, width=700, height=400)


def prac():
    """
    https://drive.google.com/drive/folders/1mr_pfVFgQiJCLow4EcLOShuIMdHej75Z?usp=sharing
    Здесь все файлы


    ТЕСТ 1
В группе учится 29 студентов. Ими были получены следующие 100-балльные оценки: 90, 79, 53, 62, 66, 68, 75, 0, 82, 29, 0, 29, 68, 90, 0, 60, 44, 44, 70, 68, 70, 89, 0, 68, 0, 66, 0, 59, 70. Найдите: 1) A – среднюю положительную оценку в группе; 2) M – медиану положительных оценок в группе; 3) H – среднее гармоническое и G – среднее геометрическое оценок, которые не менее M; 4) Q – медианную оценку в той части группы, в которой студенты набрали не менее M баллов; 5) N – количество студентов, оценки которых оказались между H и Q (включая границы).

marks = [90, 79, 53, 62, 66, 68, 75, 0, 82, 29, 0, 29, 68, 90, 0, 60, 44, 44, 70, 68, 70, 89, 0, 68, 0, 66, 0, 59, 70]
marks = [i for i in marks if i>0]
marks_m = [i for i in marks if i>=statistics.median(marks)]
print('A =',np.mean(marks))
print('M =', statistics.median(marks))
print('H = ', sps.hmean(marks_m))
print('G = ', sps.gmean(marks_m))
print('Q =', statistics.median(marks_m))
print('N =',len([i for i in marks_m if i>=statistics.median(marks_m) and i<= sps.hmean(marks_m)]))
    
##############################################    
Следующие 28 чисел – это умноженные на 10000 и округленные до ближайшего целого дневные логарифмические доходности акции компании АВС: -9, 9, -138, -145, 186, 78, 34, -37, -19, -68, -82, 158, 96, -189, 24, 84, -99, 125, -39, 26, 62, -91, 239, -211, 2, 129, 2, -16. Будем называть их преобразованными доходностями (ПД). Финансовый аналитик Глеб предполагает, что преобразованные доходности (как и исходные) приближенно распределены по нормальному закону. Чтобы проверить свое предположение Глеб нашел нижнюю квартиль L и верхнюю квартиль H нормального распределения N(μ,σ2), для которого μ – это среднее арифметическое ПД, а σ – эмпирическое стандартное отклонение ПД. Затем Глеб подсчитал количество ПД, попавших в интервал от L до H (надеясь, что в этот интервал попадет половина ПД). Результат этого вычисления показался ему недостаточно убедительным. Чтобы окончательно развеять сомнения относительно нормальности ПД, Глеб построил на одном рисунке графики функций: F^(x) и F(x), где F^(x) – эмпирическая функция распределения ПД, а F(x) – функция распределения N(μ,σ2). В качестве меры совпадения двух графиков Глеб решил использовать расстояние d между функциями F^(x) и F(x), которое он вычислил, исходя из определения: d=sup|F^(x)−F(x)|. В ответе укажите результаты вычислений Глеба: 1) среднее арифметическое ПД; 2) эмпирическое стандартное отклонение ПД; 3) квартили L и H; 4) количество ПД, попавших в интервал от L до H; 5) расстояние между функциями F^(x) и F(x).

p = [-9, 9, -138, -145, 186, 78, 34, -37, -19, -68, -82, 158, 96, -189, 24, 84, -99, 125, -39, 26, 62, -91, 239, -211, 2, 129, 2, -16]
mu = np.mean(p)
sigma = np.std(p)
print('M = ', mu)
print('sigma =', sigma)
L = sps.norm.ppf(0.25, mu, sigma)
H = sps.norm.ppf(0.75, mu, sigma)
print('L =', L)
print('H =', H)
print('N =',len([i for i in p if i <= H and i >= L]))
p_s = np.unique(sorted(p))
fr = []
c = 0
for i in p_s:
    for j in p:
        if i==j:
            c = c+1
    fr.append(c)
    c = 0
F_n = [sum(fr[0:i+1])/len(p) for i in range(len(fr))]
d = [abs(F_n[i] - sps.norm.cdf(p_s[i],mu, sigma)) for i in range(len(p_s))]
print('d =',max(d))


##################################################################
В группе Ω учатся студенты: ω1,...,ω30. Пусть X и Y – 100-балльные экзаменационные оценки по математическому анализу и теории вероятностей. Оценки студента ωi обозначаются: xi=X(ωi) и yi=Y(ωi), i=1,...,30. Все оценки известны: x1=71,y1=71, x2=52,y2=58, x3=72,y3=81, x4=87,y4=92, x5=81,y5=81, x6=100,y6=94, x7=90,y7=96, x8=54,y8=46, x9=54,y9=60, x10=58,y10=62, x11=56,y11=49, x12=70,y12=60, x13=93,y13=86, x14=46,y14=48, x15=56,y15=61, x16=59,y16=52, x17=42,y17=40, x18=60,y18=60, x19=33,y19=37, x20=83,y20=92, x21=50,y21=57, x22=93,y22=93, x23=41,y23=42, x24=55,y24=64, x25=60,y25=59, x26=37,y26=30, x27=71,y27=71, x28=42,y28=44, x29=85,y29=82, x30=39,y30=39. Требуется найти следующие условные эмпирические характеристики: 1) ковариацию X и Y при условии, что одновременно X⩾50 и Y⩾50; 2) коэффициент корреляции X и Y при том же условии.

s = 'x1=71,y1=71,x2=52,y2=58,x3=72,y3=81,x4=87,y4=92,x5=81,y5=81,x6=100,y6=94,x7=90,y7=96,x8=54,y8=46,x9=54,y9=60,x10=58,y10=62,x11=56,y11=49,x12=70,y12=60,x13=93,y13=86,x14=46,y14=48,x15=56,y15=61,x16=59,y16=52,x17=42,y17=40,x18=60,y18=60,x19=33,y19=37,x20=83,y20=92,x21=50,y21=57,x22=93,y22=93,x23=41,y23=42,x24=55,y24=64,x25=60,y25=59,x26=37,y26=30,x27=71,y27=71,x28=42,y28=44,x29=85,y29=82,x30=39,y30=39'.split(',')
x = []
y = []
for i in s:
    sp = i.split('=')
    if sp[0][0] == 'x':
        x.append(int(sp[1]))
    else:
        y.append(int(sp[1]))
x_50 = [x[i] for i in range(len(x)) if x[i]>=50 and y[i]>=50]
y_50 = [y[i] for i in range(len(x)) if x[i]>=50 and y[i]>=50]
print('Cov =',np.cov(x_50,y_50, ddof = 0)[0][1])
print('ro =', np.corrcoef(x_50,y_50)[0][1])
#cov по определению:
xy = [x_50[i]*y_50[i] for i in range(len(x_50))]
np.mean(xy) - np.mean(x_50)*np.mean(y_50)

##################################################################
Поток Ω состоит из k групп: Ω1,...,Ωk, k=3. На потоке учатся n=n1+...+nk студентов, где ni – число студентов в группе Ωi, i=1,...,k. Пусть X(ω) – 100-балльная оценка студента ω∈Ω. Далее используются следующие обозначения: x¯¯¯i – среднее значение, σi – (эмпирическое) стандартное отклонение признака X на группе Ωi. Дано: n1=24, n2=26, n3=30, x¯¯¯1=70, x¯¯¯2=76, x¯¯¯3=77, σ1=4, σ2=6, σ3=8. Требуется найти: 1) среднее значение X на потоке Ω; 2) (эмпирическое) стандартное отклонение X на потоке Ω.

n = [24, 26, 30]
x = [70, 76, 77]
sigma = [4, 6, 8]
x0 = sum([x[i]*n[i] for i in range(len(x))])/sum(n)
print('X =', x0)
#ищем общую дисперсию как сумму межгрупповой и средней из внутригрупповых 
s1 = sum([sigma[i]**2*n[i] for i in range(len(x))])/sum(n) #среднегрупповая
s2 = sum([(x[i] - x0)**2 * n[i] for i in range(len(x))])/sum(n) #межгрупповая
print('sigma =', (s1+s2)**0.5)

##################################################################
ТЕСТ 2

В группе Ω учатся 27 студентов, Ω={1,2,...,27}. Пусть X(i) – 100-балльная оценка студента i∈Ω. Из группы Ω случайным образом 7 раз выбирается студент ω∈Ω. Повторный выбор допускается. Пусть ωj – студент, полученный после выбора j=1,...,7, X(ωj) – его оценка. Среднюю оценку на случайной выборке обозначим X¯¯¯¯=17∑X(ωj). Оценки в группе даны: 100, 86, 51, 100, 95, 100, 12, 61, 0, 0, 12, 86, 0, 52, 62, 76, 91, 91, 62, 91, 65, 91, 9, 83, 67, 58, 56. Требуется найти: 1) дисперсию Var(X¯¯¯¯); 2) центральный момент μ3(X¯¯¯¯).
marks = [83, 100, 100, 51, 94, 53, 17, 46, 53, 76, 88, 72, 57, 53, 70, 94, 0, 95, 0, 93, 25, 23, 87, 81, 43]
n = 9 #размер выборки
#v = 1/n*random.choice(marks, size = n, replace=True)
Var = np.var(marks)/n
m3 = sps.moment(marks, moment = 3)/n**2
print('Var=', Var, 'm3=', m3)



##################################################################
В группе Ω учатся 27 студентов, Ω={1,2,...,27}. Пусть X(i) – 100-балльная оценка студента i∈Ω. Из группы Ω случайным образом 6 раз выбирается студент ω∈Ω. Повторный выбор не допускается. Пусть ωj – студент, полученный после выбора j=1,...,6, X(ωj) – его оценка. Среднюю оценку на случайной выборке обозначим X¯¯¯¯=16∑X(ωj). Оценки в группе даны: 100, 78, 77, 51, 82, 100, 73, 53, 78, 55, 7, 0, 81, 15, 96, 12, 71, 70, 53, 0, 73, 100, 55, 100, 59, 89, 81. Требуется найти: 1) математическое ожидание E(X¯¯¯¯); 2) дисперсию Var(X¯¯¯¯).
marks = [46, 86, 82, 84, 70, 72, 83, 0, 0, 53, 98, 51, 66, 45, 92, 84, 92, 76, 76, 65, 88, 0, 66, 72, 70, 90]
n = 5 #размер выборки
Var = np.var(marks)/n * (len(marks)-n)/(len(marks)-1)
E = np.mean(marks)
print('E=', E,'Var=', Var)

##################################################################
Распределение баллов на экзамене до перепроверки задано таблицей Работы будут перепроверять 6 преподавателей, которые разделили все работы между собой поровну случайным образом. Пусть X¯¯¯¯ – средний балл (до перепроверки) работ, попавших к одному из преподавателей. Требуется найти: 1) математическое ожидание E(X¯¯¯¯); 2) стандартное отклонение σ(X¯¯¯¯).

marks = [2,3,4,5]
fr = [7,48,8,105]
pk = [i/sum(fr) for i in fr]
n = 6
k = sum(fr)/n
distr1 = sps.rv_discrete(name='distr1', values=(marks, pk))
E = sps.rv_discrete.mean(distr1)
std_x = (sps.rv_discrete.var(distr1)/k * (sum(fr)-k)/(sum(fr)-1))**(0.5)
print('E=', E, 'std_x = ', std_x)
print(k)
print(sps.rv_discrete.var(distr1))
##################################################################
Две игральные кости, красная и синяя, подбрасываются до тех пор, пока не выпадет 19 различных (с учетом цвета) комбинаций очков. Пусть Ri – число очков на красной кости, а Bi – число очков на синей кости в комбинации с номером i. Случайные величины Xi задаются соотношениями: Xi=11Ri−9Bi,i=1,...,19. Среднее арифметическое этих величин обозначим X¯¯¯¯=119∑Xi. Требуется найти: 1) математическое ожидание E(X¯¯¯¯); 2) стандартное отклонение σ(X¯¯¯¯).
n = 19
N = 36
#ri, bi - одинаково распр
ri = [1,2,3,4,5,6]
bi = [1,2,3,4,5,6]
k1 = 11
k2 = 8
E_X = (k1*np.mean(ri) - k2*np.mean(bi))
std_x = ((k1**2*np.var(ri)+k2**2*np.var(bi))/n*(N-n)/(N-1))**(0.5)
print('E=', E_X, 'std_x = ', std_x)

##################################################################
Имеется 11 пронумерованных монет. Монеты подбрасываются до тех пор, пока не выпадет 257 различных (с учетом номера монеты) комбинаций орел-решка. Пусть Xi – число орлов в комбинации с номером i; а X¯ – среднее число орлов в полученных таким образом комбинациях. Требуется найти: 1) математическое ожидание E(X¯¯¯¯); 2) дисперсию Var(X¯¯¯¯).
n = 13
m = 486
N = 2**n
X = sps.binom(n, 0.5)
E_X = sps.binom.mean(n, 0.5)
Var_X =  sps.binom.var(n, 0.5)/m*(N-m)/(N-1)
print('E = ',E_X,'Var = ',Var_X)

##################################################################
Эмпирическое распределение признаков X и Y на генеральной совокупности Ω={1,2,...,100} задано таблицей частот Из Ω случайным образом без возвращения извлекаются 7 элементов. Пусть X¯ и Y¯ – средние значения признаков на выбранных элементах. Требуется найти: 1) математическое ожидание E(X¯); 2) дисперсию Var(Y¯); 3) коэффициент корреляции ρ(X¯,Y¯).
n = 6
N = 100
y = [2,3,5]
x = [200,400]
fr = [[10,15,20], [11,14,30]]
#рассчитаем частотные характеристики
py =  (np.array(fr[0])+np.array(fr[1]))/(sum(fr[0])+(sum(fr[1])))
px = [sum(fr[i])/(sum(fr[0])+sum(fr[1])) for i in range(len(fr))]
distr_y = sps.rv_discrete(name='distr_y', values=(y, py))
distr_x = sps.rv_discrete(name='distr_x', values=(x, px))
dx = np.array(x) - sps.rv_discrete.mean(distr_x)
dy = np.array(y) - sps.rv_discrete.mean(distr_y)
cov = 0
for i in range(len(x)):
    for j in range(len(y)):
        cov += dx[i]*dy[j]*fr[i][j]/(sum(fr[0])+sum(fr[1]))
var_y = sps.rv_discrete.var(distr_y)/n*(N-n)/(N-1)
var_x = sps.rv_discrete.var(distr_x)/n*(N-n)/(N-1)
ro = cov/n*(N-n)/(N-1)/(var_x*var_y)**(0.5)
print('E(X)=', sps.rv_discrete.mean(distr_x), 'Var(Y)=', var_y,'коэф корреляции = ', ro)

##################################################################
Эмпирическое распределение признаков X и Y на генеральной совокупности Ω={1,2,...,100} задано таблицей частот Из Ω случайным образом без возвращения извлекаются 6 элементов. Пусть X¯ и Y¯ – средние значения признаков на выбранных элементах. Требуется найти: 1) математическое ожидание E(Y¯); 2) стандартное отклонение σ(X¯); 3) ковариацию Cov(X¯,Y¯).
n = 17
N = 100
y = [2,3,4]
x = [300,400]
fr = [[14,29,10], [17,12,18]]
#рассчитаем частотные характеристики
py =  (np.array(fr[0])+np.array(fr[1]))/(sum(fr[0])+(sum(fr[1])))
px = [sum(fr[i])/(sum(fr[0])+sum(fr[1])) for i in range(len(fr))]
distr_y = sps.rv_discrete(name='distr_y', values=(y, py))
distr_x = sps.rv_discrete(name='distr_x', values=(x, px))
dx = np.array(x) - sps.rv_discrete.mean(distr_x)
dy = np.array(y) - sps.rv_discrete.mean(distr_y)
cov = 0
for i in range(len(x)):
    for j in range(len(y)):
        cov += dx[i]*dy[j]*fr[i][j]/(sum(fr[0])+sum(fr[1]))
var_y = sps.rv_discrete.var(distr_y)/n*(N-n)/(N-1)
var_x = sps.rv_discrete.var(distr_x)/n*(N-n)/(N-1)
cov = cov/n*(N-n)/(N-1)
print('E(Y)=', sps.rv_discrete.mean(distr_y), 'sigma_x=', var_x**0.5,'cov = ', cov)

##################################################################
Тест 3
Пусть x⃗ =(x1,…,x30) – реализация случайной выборки X⃗ =(X1,…,X30) из нормального распределения N(μ;3,4^2). Проверяется на уровне значимости α=0,01 основная гипотеза H0:μ=1,29 против альтернативной гипотезы H1:μ≠1,29 с критическим множеством вида Kα=(−∞,−A)∪(A,+∞). 1) Найдите значение статистики критерия Zнабл.=Z(x⃗ ). 2) Найдите границу А критического множества. 3) Найдите P-значение критерия и сделайте выводы. 4) Найдите мощность W критерия для H1:μ=1,17. Исходные данные: x⃗ = (1,416; 0,624; 6,471; 6,256; 1,787; 2,546; -1,758; -5,475; 0,077; 1,792; 5,443; 5,348; -0,057; 0,232; -2,305; -3,568; -4,541; 7,893; -0,473; -0,229; -3,0; 3,903; -4,227; 0,537; -1,785; 2,575; -0,477; -2,754; 1,164; 2,716). Известна дисперсия, гипотеза о равенстве мат ожиданий

x = '0,189; -0,66; 0,218; -0,828; -0,65; 0,814; 2,846; 6,009; 1,634; -3,487; 1,606; -1,147; 0,615; 2,491; -1,091; 2,202; -1,503; 3,921; 2,095; -2,205; 3,671; -1,27; 6,15; 5,291; -2,73'
x = x.replace(',','.')
x = x.replace(';',',')
x = list(x.split(','))
x = [float(i) for i in x]
a = 0.08
mu0 = 1.22
mu1 = 1.03
sigma = 2.7
z = (np.mean(x)-mu0)*len(x)**0.5/sigma
pv = 2*min(sps.norm.sf(abs(z)), sps.norm.cdf(abs(z)))
z1 = (mu1-mu0)*len(x)**0.5/sigma
beta = sps.norm.cdf(sps.norm.isf(a/2)-z1) + sps.norm.cdf(sps.norm.isf(a/2)+z1) - 1
cv = sps.norm.isf(a/2)
k1 = sps.norm.isf(a/2)
k2 = sps.norm.isf(1-a/2)
print('z =', z)
print(k1,k2)
print('P-value =', pv)
if pv>a:
    print('принимается')
else:
    print('отклоняется')
print('w =', 1-beta)



##################################################################
Пусть x⃗ =(x1,…,x20) – реализация случайной выборки X⃗ =(X1,…,X20) из нормального распределения N(μ;σ^2). Проверяется на уровне значимости α=0,05 основная гипотеза H0:μ=1,10 против альтернативной гипотезы H1:μ≠1,10 с критическим множеством вида Kα=(−∞,−A)∪(A,+∞). 1) Найдите значение статистики критерия t=Tнабл.=T(x⃗ ). 2) Найдите границу А критического множества. 3) Найдите P-значение критерия и сделайте выводы. 4) Найдите мощность W критерия для H1:μ=0,91. Исходные данные: x⃗ = (1,146; 2,958; -3,325; -0,534; 0,374; 5,293; 0,12; 1,185; 5,148; 5,351; 2,639; 1,47; -1,967; 4,96; 6,057; -0,542; 1,544; -0,243; -1,988; 2,844). Ничего неизвестно, гипотеза о равенстве мат ожиданий

x = '1,825; 0,35; 1,837; 2,528; -3,712; 6,468; 8,392; 0,079; 5,281; -2,019; 4,69; -0,607; 1,925; 2,688; 1,573; 4,66; 1,273; -0,505; 1,36; 0,403'
x = x.replace(',','.')
x = x.replace(';',',')
x = list(x.split(','))
x = [float(i) for i in x]
a = 0.05
mu0 = 1.54
mu1 = 1.35
n = len(x)
s = np.var(x,ddof = 1)**(0.5)
t = (np.mean(x)-mu0)*(n**0.5)/s
pv = 2*min(sps.t.sf(t,n-1), sps.t.cdf(t,n-1))
delta = (mu1-mu0)*(n**0.5)/s
beta = sps.nct.cdf(sps.t.isf(a/2,n-1),n-1,delta) - sps.nct.cdf(-sps.t.isf(a/2,n-1),n-1,delta)
k1 = sps.t.isf(1-a/2,n-1)
k2 = sps.t.isf(a/2,n-1)

print('t =', t)
print(k1,k2)
print('P-value =', pv)
if pv>a:
    print('принимается')
else:
    print('отклоняется')
print('w =', 1-beta)


##################################################################
Пусть x⃗ =(x1,…,x30) – реализация случайной выборки X⃗ =(X1,…,X30) из нормального распределения N(1,18;σ^2). Проверяется на уровне значимости α=0,02 гипотеза H0:σ=1,14 против альтернативной гипотезы H1:σ≠1,14 с критическим множеством вида Kα=(0;A)∪(B;+∞). 1) Найдите значение статистики критерия χ20. 2) Найдите границы А и В критического множества и проверьте гипотезу H0. 3) Найдите P-значение критерия. 4) Найдите вероятность ошибки второго рода β для σ1=1,24. Исходные данные: x⃗ = (0,889; 1,514; 2,846; 2,811; 0,84; 0,945; 0,02; -0,441; -0,796; 3,739; 0,688; 0,777; -0,233; 2,284; -0,681; 1,056; 0,21; 1,8; 0,687; -0,144; 1,285; 1,851; 1,402; 1,695; 0,533; 0,87; 0,486; 0,874; 0,312; -0,821). Известно мат ожидание, гипотеза о равенстве дисперсий

x = '0,185; 1,269; 2,034; 1,356; 2,498; -0,185; 1,665; 0,436; 0,226; 0,556; 0,858; 1,273; -0,107; 2,228; 1,736; -0,526; 2,892; 3,352; 2,542; 1,007; 0,0; 2,402; 0,754; 2,591; 1,445; 2,314; 1,613; 2,008; 1,222; 3,228; 1,353; 1,664; 3,338; -0,313; -0,226; 2,305; -0,116; 3,406; 0,743; 0,365; 3,383; 2,883; 3,32; 2,234; 0,237'
x = x.replace(',','.')
x = x.replace(';',',')
x = list(x.split(','))
x = [float(i) for i in x]
a = 0.03
n = len(x)
sigma0 = 1.13
sigma1 = 1.23
mu = 1.83
s0 = 0
for i in x:
    s0 = s0 + (i - mu)**2
s0 = s0/n
x2 = n * s0/sigma0**2
k1 = sps.chi2.isf(1-a/2,n)
k2 = sps.chi2.isf(a/2,n)
beta = sps.chi2.cdf(sps.chi2.isf(a/2,n)*sigma0**2/sigma1**2,n) - sps.chi2.cdf(sps.chi2.isf(1-a/2,n)*sigma0**2/sigma1**2,n)
pv = 2*min(sps.chi2.sf(x2,n), sps.chi2.cdf(x2,n))

print('chi2 =', x2)
print(k1,k2)
print('P-value =', pv)
if pv>a:
    print('принимается')
else:
    print('отклоняется')
print('beta =', beta)



##################################################################
Пусть x⃗ =(x1,…,x30) – реализация случайной выборки X⃗ =(X1,…,X30) из нормального распределения N(μ;σ^2). Проверяется на уровне значимости α=0,02 гипотеза H0:σ=1,14 против альтернативной гипотезы H1:σ≠1,14 с критическим множеством вида Kα=(0;A)∪(B;+∞). 1) Найдите значение статистики критерия χ2. 2) Найдите границы А и В критического множества и проверьте гипотезу H0. 3) Найдите P-значение критерия. 4) Найдите вероятность ошибки второго рода β для σ1=1,24. Исходные данные: x⃗ = (0,889; 1,514; 2,846; 2,811; 0,84; 0,945; 0,02; -0,441; -0,796; 3,739; 0,688; 0,777; -0,233; 2,284; -0,681; 1,056; 0,21; 1,8; 0,687; -0,144; 1,285; 1,851; 1,402; 1,695; 0,533; 0,87; 0,486; 0,874; 0,312; -0,821). Ничего не известно, гипотеза о равенстве дисперсий

x = '0,185; 1,269; 2,034; 1,356; 2,498; -0,185; 1,665; 0,436; 0,226; 0,556; 0,858; 1,273; -0,107; 2,228; 1,736; -0,526; 2,892; 3,352; 2,542; 1,007; 0,0; 2,402; 0,754; 2,591; 1,445; 2,314; 1,613; 2,008; 1,222; 3,228; 1,353; 1,664; 3,338; -0,313; -0,226; 2,305; -0,116; 3,406; 0,743; 0,365; 3,383; 2,883; 3,32; 2,234; 0,237'
x = x.replace(',','.')
x = x.replace(';',',')
x = list(x.split(','))
x = [float(i) for i in x]
a = 0.03
n = len(x)
sigma0 = 1.13
sigma1 = 1.23
s = np.var(x, ddof =  1)
x2 = (n-1) * s/sigma0**2
k1 = sps.chi2.isf(1-a/2,n-1)
k2 = sps.chi2.isf(a/2,n-1)
beta = sps.chi2.cdf(sps.chi2.isf(a/2,n-1)*sigma0**2/sigma1**2,n-1) - sps.chi2.cdf(sps.chi2.isf(1-a/2,n-1)*sigma0**2/sigma1**2,n-1)
pv = 2*min(sps.chi2.sf(x2,n-1), sps.chi2.cdf(x2,n-1))
print('chi2 =', x2)
print(k1,k2)
print('P-value =', pv)
if pv>a:
    print('принимается')
else:
    print('отклоняется')
print('beta =', beta)

##################################################################
Пусть x⃗ =(x1,…,x25) – реализация случайной выборки X⃗ =(X1,…,X25) из нормального распределения N(μx;0,7^2), а y⃗ =(y1,…,y30) – реализация случайной выборки Y⃗ =(Y1,…,Y30) из нормального распределения N(μy;1,4^2). Известно, что X⃗ и Y⃗ независимы. Проверяется гипотеза H0:μx=μy против альтернативной гипотезы H1:μx>μy. При уровне значимости α применяется критерий с критической областью {Z>A}, где статистика критерия Z=Z(X⃗ ,Y⃗ ) – это нормированная разность X¯−Y¯, A=Aα – зависящее от α критическое значение. Соответствующее критическое множество имеет вид Kα=(Aα;∞). 1) Найдите значение статистики критерия Zнабл.=Z(x⃗ ,y⃗ ). 2) Найдите P-значение критерия. 3) Найдите критическое значение A, критическое множество Kα и проверьте гипотезу H0 при α=0,02. 4) Найдите мощность критерия W в случае μx−μy=0,1 и α=0,02. Исходные данные: x⃗ = (3,842; 3,374; 4,18; 4,5; 4,247; 4,412; 3,756; 3,946; 3,729; 3,948; 3,631; 2,992; 4,324; 3,919; 3,059; 4,524; 3,565; 4,236; 4,71; 4,29; 4,998; 3,336; 4,482; 3,721; 3,59); y⃗ = (3,19; 3,564; 4,079; 2,369; 5,261; 4,652; 1,849; 6,084; 6,654; 5,65; 3,748; 2,501; 5,476; 3,436; 5,711; 4,292; 5,367; 4,499; 4,989; 4,015; 6,5; 4,178; 4,563; 6,636; 2,113; 2,221; 5,357; 2,358; 6,721; 3,421).

x = '3,842; 3,374; 4,18; 4,5; 4,247; 4,412; 3,756; 3,946; 3,729; 3,948; 3,631; 2,992; 4,324; 3,919; 3,059; 4,524; 3,565; 4,236; 4,71; 4,29; 4,998; 3,336; 4,482; 3,721; 3,59'
y = '3,19; 3,564; 4,079; 2,369; 5,261; 4,652; 1,849; 6,084; 6,654; 5,65; 3,748; 2,501; 5,476; 3,436; 5,711; 4,292; 5,367; 4,499; 4,989; 4,015; 6,5; 4,178; 4,563; 6,636; 2,113; 2,221; 5,357; 2,358; 6,721; 3,421'
x = x.replace(',','.')
x = x.replace(';',',')
x = list(x.split(','))
x = [float(i) for i in x]
y = y.replace(',','.')
y = y.replace(';',',')
y = list(y.split(','))
y = [float(i) for i in y]
a = 0.02
sigma_x = 0.7
sigma_y = 1.4
x_mean = np.mean(x)
y_mean = np.mean(y)
d = 0.1
z = (x_mean-y_mean)/(sigma_x**2/len(x) + sigma_y**2/len(y))**0.5
pv = sps.norm.sf(z)
z1 = (d)/(sigma_x**2/len(x) + sigma_y**2/len(y))**0.5
beta = sps.norm.cdf(sps.norm.isf(a)-z1) 
cv = sps.norm.isf(a)
print('z =', z)
print(cv)
print('P-value =', pv)
if pv>a:
    print('принимается')
else:
    print('отклоняется')
print('w =', 1-beta)

##################################################################

Для трех групп финансовых показателей A: (X1;...;X27), B: (Y1;...;Y33), C: (Z1;...;Z39), которые по предположению независимы и распределены, соответственно, по трем нормальным законам N(μx,σ2), N(μy,σ2), N(μz,σ2) (с одинаковой неизвестной дисперсией σ2) на уровне значимости α=0,01 с помощью F-критерия (Фишера) проверяется гипотеза H0:μx=μy=μz о совпадении ожидаемых значений показателей. Конкретные значения всех показателей указаны ниже. 1) По данным значениям показателей найдите межгрупповую дисперсию. 2) По этим же данным найдите среднюю групповую дисперсию. 3) Найдите значение статистики F-критерия, критическое множество Kα и проверьте гипотезу H0. 4) Найдите P-значение критерия и сделайте выводы. Значения показателей группы A: (0,616; 1,046; 2,575; -0,344; 2,339; -0,68; 3,739; 2,251; -1,252; 3,536; -0,491; 5,556; 4,856; -1,68; 2,33; 1,345; 2,829; 2,539; 3,304; 3,497; 0,211; 3,563; 0,94; 3,642; 1,956; 3,919; 3,568). Значения показателей группы B: (2,834; 1,504; -0,678; 5,619; 0,97; 1,617; 3,768; -1,309; 3,343; -1,778; -0,854; 1,04; 2,83; -2,335; 4,853; 5,6; 4,341; 4,362; 3,52; 1,151; -0,621; -2,88; 1,697; 1,753; 0,211; 2,157; 1,989; 2,457; 1,399; 1,61; -0,558; 2,132; 2,293). Значения показателей группы C: (2,398; -2,77; 4,679; 1,924; 0,574; 5,329; 0,699; 4,457; -0,3; 1,682; -1,34; 0,046; -1,096; 1,935; 2,411; 4,134; 5,643; 3,071; 6,526; 4,941; 2,844; -0,43; -2,066; 0,22; 0,317; -1,923; 1,38; -2,485; 0,111; -0,542; 4,78; 1,93; 0,462; 5,487; -3,547; 2,933; -0,987; -0,21; 3,955).
def str_to_list(x):
    x = x.replace(',','.')
    x = x.replace(';',',')
    x = list(x.split(','))
    x = [float(i) for i in x]
    return x
x = '3,956; 0,338; -0,582; 3,536; -0,028; 0,245; 0,807; 1,942; 1,05; -1,4; 0,355; -3,436; 3,401; -1,945; -0,751; 2,025; 0,125; 5,603; -1,203; 2,541; 1,806; -0,903; 3,156; 1,488; 3,752; 3,876; 7,092'
y = '5,108; 1,014; 1,325; 4,539; 3,473; 3,436; -1,981; 1,842; 0,129; 2,572; 1,664; 4,084; 2,661; 3,787; 0,781; -0,367; 0,916; 1,859; 2,81; 7,322; 1,799; -0,394; 1,07; 0,787; 3,056; -1,798; 2,052; 2,276; 2,457; 0,466; 1,329; -1,518; 0,716'
z = '0,597; 2,899; -0,875; 3,775; 5,487; -3,068; 2,923; 3,525; 0,37; 0,947; 1,581; 1,185; 1,158; -2,122; 4,666; 4,491; -0,052; -1,619; 3,151'
x = str_to_list(x)
y = str_to_list(y)
z = str_to_list(z)

from scipy.stats import f_oneway
sample = pd.read_csv('ds5.9.8.csv', header = None, decimal = ',', sep = ';')
x = [i for i in sample[0] if pd.isnull(i) == False]
y = [i for i in sample[1] if pd.isnull(i) == False]
z = [i for i in sample[2] if pd.isnull(i) == False]
a = 0.03
xyz_list = [x,y,z]
xyz = x + y + z
delta = 0
for i in range(3):
    delta = delta + ((np.mean(xyz_list[i]) - np.mean(xyz))**2) * len(xyz_list[i])
delta = delta / len(xyz)
sigma_mean = (np.var(x)*len(x) + np.var(y)*len(y) + np.var(z)*len(z)) / len(xyz)
F = delta * (len(xyz) - 3) / ((3-1) * sigma_mean)
cv = sps.f.isf(a,3-1,len(xyz)-3)
pv = sps.f.sf(F,3-1,len(xyz)-3)
print('межгрупповая дисперсия =', delta)
print('средняя групповая дисперсия =', sigma_mean)
print('k =', cv)
print('F =', F)
print('pv =', pv)
print('Через встроенную функцию f_oneway: ')
print('F =', f_oneway(x,y,z)[0])
print('pv =', f_oneway(x,y,z)[1])
#для экзамена: найти доверительные интервалы для мат ожиданий 
gamma = 0.91
teta_1 = []
teta_2 = []
mse = len(xyz)*sigma_mean/(len(xyz)-3)
for i in range(3):
    teta_1.append(np.mean(xyz_list[i]) - sps.t.isf((1-gamma)/2,len(xyz)-3)*(mse/len(xyz_list[i]))**0.5)
    teta_2.append(np.mean(xyz_list[i]) + sps.t.isf((1-gamma)/2,len(xyz)-3)*(mse/len(xyz_list[i]))**0.5)
for i in range(3):
    print('mu{}='.format(i+1), teta_1[i], teta_2[i])

##################################################################
Пусть (x1,y1);...;(x31,y31) – реализация случайной выборки (X1,Y1);...;(X31,Y31) из двумерного нормального распределения N(μx;μy;σ2x;σ2y;ρ). Используя векторы x⃗ =(x1;...;x31) и y⃗ =(y1;...;y31), постройте асимптотический 0,93-доверительный интервал (θˆ1;θˆ2) для коэффициента корреляции ρ. В ответе укажите: 1) выборочный коэффициент корреляции ρˆ; 2) верхнюю границу θˆ2 построенного доверительного интервала для ρ. Исходные данные: x⃗ = (-0,616; -0,238; 0,173; -0,255; 0,531; 0,718; -0,161; 0,371; -1,014; -0,413; -1,571; 0,485; 0,486; 0,688; -0,944; 0,155; 0,003; 0,111; 0,752; 0,783; -0,102; -0,74; -2,097; 1,349; -0,044; -0,617; -0,782; -0,873; -0,995; -1,256; -0,596), y⃗ = (-1,34; -0,25; 0,101; -0,626; -0,088; 0,539; -0,451; 0,233; -1,186; -0,423; -1,329; 0,231; 0,209; 0,638; -0,274; -0,491; -0,319; 0,294; 0,895; 1,164; -0,57; -1,078; -1,526; 1,491; 0,182; -0,31; -1,001; -0,969; -0,918; -0,904; -0,595).
gamma = 0.77
x =  '-1,598; 1,067; 0,789; 0,546; -2,166; -2,004; 0,489; 0,113; -0,902; -0,776; -0,164; -0,541; 0,71; 0,082; -0,737; 0,655; 0,656; 0,498; -0,527; -0,185; 1,383; -0,283; -2,518; 0,688; 1,379; -0,254; 0,886; 0,221; -0,905; 1,209; 0,128; -0,949; 1,046; 1,272; -1,226; -0,964; -0,72'
y = '-2,102; 1,429; 1,516; 0,266; -1,612; -1,665; 1,203; 0,413; -0,96; -0,431; -0,575; -0,045; 0,654; 0,773; -0,584; 0,857; 0,668; 0,751; -0,605; -0,594; 1,547; -0,045; -2,164; 1,106; 1,206; 0,388; 0,577; -0,027; -1,309; 1,045; 0,85; -0,916; 1,362; 0,694; -1,108; -0,845; -0,963'
x = x.replace(',','.')
x = x.replace(';',',')
x = list(x.split(','))
x = [float(i) for i in x]
y = y.replace(',','.')
y = y.replace(';',',')
y = list(y.split(','))
y = [float(i) for i in y]
x_mean = np.mean(x)
y_mean = np.mean(y)
ro = sps.pearsonr(x, y)[0]
print('коэф корреляции', ro)
teta1 = math.tanh(math.atanh(ro)-sps.norm.isf((1-gamma)/2)/(len(x)-3)**0.5)
teta2 = math.tanh(math.atanh(ro)+sps.norm.isf((1-gamma)/2)/(len(x)-3)**0.5)
print('(',teta1,',',teta2,')')

##################################################################
По содержащейся в файле ds реализации случайной выбокри из двухмерно норм расп

from sympy import *
sample = pd.read_csv('ds6.4.10.csv', header = None, decimal = ',', sep = ';')
x = np.array([i for i in sample[0] if pd.isnull(i) == False])
y = np.array([i for i in sample[1] if pd.isnull(i) == False])
mx = 3
my = 4
A = Symbol('A')
B = Symbol('B')
C = Symbol('C')
n = Symbol('n')
ro = Symbol('rho')
Pi = Symbol('pi')
sigma = Symbol('sigma')
lnL = -n*ln(sigma**2) - n*ln(2*Pi) - n/2 * ln(1-ro**2) - n*(A + B -2*ro* C)/(2*sigma**2*(1-ro**2))
a, b, c = np.mean((x - mx)**2), np.mean((y - my)**2), np.mean((x - mx)*(y - my))

lnL.subs([(n,len(x)), (A,a), (B, b), (C, c)])


d1 = simplify(diff(lnL, sigma))
d2 = simplify(diff(lnL, ro))
d1


sol = solve([d1,d2], [sigma, ro])
print('Ответ:')
#отбрасываем отрицательный корень для sigma...
simplify(sol[1])


print('sigma с домиком =',float(sol[1][0].subs([(A,a), (B, b), (C, c)])))
print('ro с домиком =', float(sol[1][1].subs([(A,a), (B, b), (C, c)])))

    """