

Практическая работа №4 Однофакторный дисперсионный анализ
Выполнил студент . Вариант №11
Цель работы
Научиться выполнять однофакторный дисперсионный анализ; сформировать навыки реализации методов с помощью прикладных программных пакетов.
Постановка задачи
Результаты статистического эксперимента приведены в таблице 1. Требуется оценить характер (случайной) зависимости переменной |
от уровня фактора (простая группировка). Полученные результаты содержательно проинтерпретировать. |
||
1. |
Построить графически зависимость переменных от уровней фактора . |
|
|
2. |
Сформулировать модели однофакторного дисперсионного анализа зависимостей значений от уровней фактора в центральной параметризации. Является ли дизайн данного эксперимента сбалансированным? Построить МНК оценки параметров и несмещенную оценку дисперсии. В предположении нормальности ошибок построить |
||
|
доверительные интервалы для параметров уровня доверия |
|
|
3. |
Сформулировать модель однофакторного дисперсионного анализа когда наибольший уровень фактора рассматривается как базовый. Построить МНК оценки параметров и несмещенную оценку дисперсии. В предположении нормальности ошибок построить доверительные интервалы для параметров уровня доверия |
||
4. |
На основании результатов, полученных в предыдущих пунктах проверить визуально монотонности влияния величины фактора |
на результат. Построить графически оценку зависимостей уровня фактора на результат. Как данная зависимость согласуется с результатами из п.1, если наложить один график на другой? |
|
5. |
Провести анализ ошибок. На базе ошибок построить гистограмму с шагом . Оценить расстояние полученной оценки до класса центрированных нормальных распределений по Колмогорову. |
||
6. |
Составить таблицу дисперсионного анализа. Проверить значимость фактора |
на результаты эксперимента. |
|
In [1]: #Таблица 1
from IPython.display import Image Image('4-1.png')
Out[1]:
In [3]: table=[[],[]]#table[0]=X; table[1]=Y table[0]=[2,4,3,5,1,0,5,3,3,2,5,1,5,5,4,3,4,3,0,4,1,3,4,1,2,0,6,2,2,6,6,3,3,4,2,1,3,2,0,0,1,4,6,4,4,3,5,4,6,2]
table[1]=[10.56,16.83,11.41,10.91,12.77,2.36,6.78,6.80,4.20,5.90,5.30,15.63,5.07,8.13,17,6,12.37,9.97,2.17,8.35,9.15,11.54,10.47,14.99,7.53,5.30,13.83,11.16,17.68,16.59,14.53,4.96,6.37,15.25,8.95,17.28,19.87,14.73,7.38,2.25,4.1,4.01,7.68,22.52,18.20,14.75,11.13,11.51,3.11,6.71] print(table[0])
print("\n") print((table[1]))
[2, 4, 3, 5, 1, 0, 5, 3, 3, 2, 5, 1, 5, 5, 4, 3, 4, 3, 0, 4, 1, 3, 4, 1, 2, 0, 6, 2, 2, 6, 6, 3, 3, 4, 2, 1, 3, 2, 0, 0, 1, 4, 6, 4, 4, 3, 5, 4, 6, 2]
[10.56, 16.83, 11.41, 10.91, 12.77, 2.36, 6.78, 6.8, 4.2, 5.9, 5.3, 15.63, 5.07, 8.13, 17, 6, 12.37, 9.97, 2.17, 8.35, 9.15, 11.54, 10.47, 14.99, 7.53, 5.3, 13.83, 11.16, 17.68, 16.59, 14.53, 4.96, 6.37, 15.25, 8.95, 17.28, 19.87, 14.73, 7.38, 2.25, 4.1, 4.01, 7.68, 22.52, 18.2, 14.75, 11.13, 11.51, 3.11, 6.71]
Выполнение работы
Каждый пункт работы выполняется с помощью кода.
Задание 1
Результаты эксперимента:
In [4]: import matplotlib.pyplot as plt import numpy as np
x = np.array(table[0]) y = np.array(table[1])
plt.scatter(x, y,color="blue") plt.show()
Задание 2
In [5]: k=[[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]] for i in range(len(table[0])):
if table[0][i]==0: k[0][0]+=1 k[1][0]+=table[1][i]
if table[0][i]==1: k[0][1]+=1 k[1][1]+=table[1][i]
if table[0][i]==2: k[0][2]+=1 k[1][2]+=table[1][i]
if table[0][i]==3: k[0][3]+=1 k[1][3]+=table[1][i]
if table[0][i]==4: k[0][4]+=1 k[1][4]+=table[1][i]
if table[0][i]==5: k[0][5]+=1 k[1][5]+=table[1][i]
if table[0][i]==6: k[0][6]+=1 k[1][6]+=table[1][i]
print(k)
[[5, 6, 8, 10, 10, 6, 5], [19.459999999999997, 73.91999999999999, 83.22, 95.87, 136.51, 47.32000000000001, 55.74]]
In [18]: import math ni=[]
s=[]
for i in range(len(k[0])): ni.append(k[1][i]/k[0][i]) temp_s=0
for n in range(len(table[0])): if table[0][n]==i:
temp_s+=math.pow(ni[i]-table[1][n],2) s.append(temp_s)
sigma=(sum(s))/(50-len(k[0])) print(ni)
print(s) print(sigma)
[3.8919999999999995, 12.319999999999999, 10.4025, 9.587, 13.651, 7.886666666666668, 11.148]
[22.15708, 120.50640000000001, 116.55595, 221.09281, 260.62429, 35.568133333333336, 124.88288] 20.962501007751936
Отсюда получаем, что
Доверительные интервалы:
In [20]: xalpha=[2.78,2.57,2.36,2.26,2.26,2.57,2.78] for i in range(len(ni)):
print(ni[i]-((xalpha[i]*s[i])/((k[0][i])**0.5)),ni[i]+((xalpha[i]*s[i])/((k[0][i])**0.5)))
-23.654873806972976 31.438873806972975
-114.115086700183 138.755086700183 -86.85015310651538 107.65515310651539 -148.42244897842855 167.59644897842853 -172.61059961191933 199.91259961191935 -29.431351478126206 45.20468481145954 -144.11311455170758 166.40911455170757
Задание 4
In [25]: import matplotlib.pyplot as plt import numpy as np
x = np.array(table[0]) y = np.array(table[1])
zxc=np.array([0,1,2,3,4,5,6]) plt.scatter(x, y,color="blue") plt.plot(zxc,ni,color="red") plt.show()
На получившемся рисунке видно, что красный график примерно следует центрам разброса синих точек на каждой величине
Задание 5
In [32]: e=[]
for i in range(len(table[0])): e.append(table[1][i]-ni[table[0][i]])
e=sorted(e) print(sorted(e))
[-9.641, -8.219999999999999, -8.038, -5.387, -5.301, -4.627, -4.5024999999999995, -3.6925, -3.5869999999999997, -3.468, -3.2169999999999996, -3.180999999999999, -3.169999999999998, -2.8724999999999996, -2.8166666666666673, -2.787, -2.586666666666668, -2.141, -1.7219999999999995, -1.6419999999999995,
-1.5319999999999996, -1.4525000000000006, -1.2810000000000006, -1.1066666666666674, 0.15750000000000064, 0.24333333333333318, 0.3830000000000009, 0.45000000000000107, 0.7575000000000003, 1.4080000000000004, 1.5990000000000002, 1.8230000000000004, 1.9529999999999994, 2.6700000000000017, 2.682000000000 0004, 3.0233333333333325, 3.1789999999999985, 3.243333333333333, 3.3100000000000023, 3.349, 3.3819999999999997, 3.4880000000000004, 4.327500000000001, 4.5489999999999995, 4.960000000000003, 5.163, 5.442, 7.2775, 8.869, 10.283000000000001]
In [27]: #Гистограмма
from IPython.display import Image Image('4-2.png')
Out[27]:
По Колмогорову:
In [33]: import math
from scipy.stats import norm F=[]
F0=[] diff=[]
for i in range(len(e)): F.append(0.02*(i+1)) F0.append(norm.cdf(e[i])) diff.append(abs(F[i]-F0[i]))
print(max(diff))
#https://medstatistic.ru/methods/methods10.html
0.3668186854123239
Отсюда получаем, что
Задание 6
не зависит от зависит от
Оценка зависимости:
, где
In [34]: import numpy as np X=[[],[]]
Y=[]
for i in range(len(table[0])): X[0].append(1) X[1].append(table[0][i]) Y.append([]) Y[i].append(table[1][i])
A=np.array(X)
B=np.array(Y)
transposed=A.T print(np.dot(np.dot(np.linalg.inv(np.dot(A,transposed)),A),B))
[[8.5163058 ]
[0.56726783]]
In [35]: beta0=8.5163058 beta1=0.56726783 rss=0
for i in range(len(table[0])): rss+=(table[1][i]-(beta0+(beta1*table[0][i])))**2
print(rss)
1236.8334360954336
In [40]: rssh=0 avg=sum(ni)/len(ni) print(avg)
for i in range(len(table[0])): rssh+=(table[1][i]-avg)**2
print(rssh) print(((rssh-rss)/6)/((rss)/(50-7)))
9.841023809523808
1294.9984181235827
0.3370292439573391
Отсюда получаем, что
Критерий:
Для того, что бы принять нулевую гипотизу, нужно потребовать, что бы |
. |
In [41]: #Таблица 2
from IPython.display import Image Image('4-3.png')

Out[41]: