

Практическая работа №5 Двухфакторный дисперсионный анализ
Выполнил студент . Вариант №11
Цель работы
Научиться выполнять двухфакторный дисперсионный анализ; сформировать навыки реализации метода с помощью прикладных программных пакетов.
Постановка задачи
Результаты статистического эксперимента приведены в таблице 1. Требуется оценить характер (случайной) зависимости переменной от уровней факторов и . Полученные результаты содержательно проинтерпретировать. |
|
||
1. |
Сформулировать модели двухфакторного дисперсионного анализа зависимости значений от уровней фактора |
и в центральной параметризации. Является ли дизайн данного эксперимента сбалансированным? Построить МНК-оценки параметров и несмещенную оценку дисперсии. В предположении нормальности ошибок построить |
|
|
доверительные интервалы для параметров уровня доверия |
|
|
2. |
Проверить визуально согласование исходных данных с предположением аддитивности вляния факторов. Построить графически оценку зависимости уровней фактора при каждом фиксированном значении фактора . Наблюдается ли эффект пересечения фактора? |
|
|
3. |
Сформулировать модель двухфакторного дисперсионного анализа когда пара наибольших уровней факторов и |
рассматривается как базовая. Построить МНК оценки параметров и несмещенную оценку дисперсии. В предположении нормальности ошибок построить доверительные интервалы для параметров уровня доверия |
. |
4.Провести анализ ошибок. На базе ошибок построить гистограмму с шагом . Оценить расстояние полученной оценки до класса центрированных нормальных распределений по Колмогорову.
5.Составить таблицу дисперсионного анализа. Провести дисперсионный анализ, начиная с проверки значимости взаимодействия факторов на результаты эксперимента.
In [1]: #Таблица 1
from IPython.display import Image Image('5-1.png')
Out[1]:
In [6]: table=[[],[],[]]#table[0]=Y; table[1]=A; table[2]=B table[0]=[39.97,42.62,41.52,45.26,44.62,41.81,40.39,34.74,40.90,38.84,39.69,40,39.18,41.19,41.59,36.64,37.55,36.68,32.66,33.76,32.74,35.48,34.31,38.63,53.42,51.59,52.16,50.86,54.93,49.58,45.54,47.67,50.32,50.62,47.50,49.34,49.01,47.27,47.89,49.66,48.62,48.95,46.55,45.11,46.14,45.97,41.28,45.03] table[1]=[1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4]
table[2]=[1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2] print((table[0]))
print("\n") print((table[1])) print("\n") print((table[2]))
[39.97, 42.62, 41.52, 45.26, 44.62, 41.81, 40.39, 34.74, 40.9, 38.84, 39.69, 40, 39.18, 41.19, 41.59, 36.64, 37.55, 36.68, 32.66, 33.76, 32.74, 35.48, 34.31, 38.63, 53.42, 51.59, 52.16, 50.86, 54.93, 49.58, 45.54, 47.67, 50.32, 50.62, 47.5, 49.34, 49.01, 47.27, 47.89, 49.66, 48.62, 48.95, 46.55, 45.1
1, 46.14, 45.97, 41.28, 45.03]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
[1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
Выполнение работы
Каждый пункт работы выполняется с помощью кода.
Задание 1
Существуют только
In [18]: import math nij=[[],[],[],[]] s=[[],[],[],[]] kij=[[],[],[],[]]
for i in range(1,4+1): for j in range(1,2+1):
k=0 temp_s=0
for n in range(len(table[0])):
if (table[1][n]==i and table[2][n]==j): k+=table[0][n]
nij[i-1].append(k/6) kij[i-1].append(k)
for n in range(len(table[0])):
if (table[1][n]==i and table[2][n]==j): temp_s+=math.pow(nij[i-1][j-1]-table[0][n],2)
s[i-1].append(temp_s) print(nij)
print(s) sigma=0
for i in range(len(s)): sigma+=sum(s[i])
sigma=sigma/(48-8) print(sigma)
[[42.63333333333333, 39.093333333333334], [38.80500000000001, 34.596666666666664], [52.09, 48.498333333333335], [48.56666666666667, 45.01333333333334]]
[[19.85713333333331, 25.139133333333305], [24.362950000000012, 25.028133333333358], [17.902400000000007, 18.96288333333333], [3.680933333333317, 18.493333333333315]] 3.835672499999999
Отсюда получаем, что
Следовательно
Доверительные интервалы:
In [19]: xalpha=2.02
for i in range(len(nij)):
for j in range(len(nij[0])): print(nij[i][j]-((xalpha*s[i][j])/(math.pow(kij[i][j]-1,0.5))),nij[i][j]+((xalpha*s[i][j])/(math.pow(kij[i][j]-1,0.5))))
40.12047381751142 45.14619284915525
35.77054683159574 42.41611983507093
35.5728133976637 42.03718660233631
31.079153815083824 38.1141795182495
50.04117097417431 54.1388290258257
46.24894607070638 50.74772059596029
48.13034074443986 49.00299258889348
42.736003908368026 47.29066275829866
Задание 2
In [44]: import matplotlib.pyplot as plt import numpy as np
x = np.array([1,1,1,1,1,1,2,2,2,2,2,2])
y= np.array([39.97,42.62,41.52,45.26,44.62,41.81,40.39,34.74,40.90,38.84,39.69,40]) zxc=np.array([1,2])
#n=np.array([42.63, 39.09, 38.80, 34.59, 52.09, 48.49, 48.56, 45.01]) n=np.array([42.63, 39.09])
plt.scatter(x, y,color="blue") plt.plot(zxc,n,color="red")
#x = np.array([3,3,3,3,3,3,4,4,4,4,4,4]) x = np.array([1,1,1,1,1,1,2,2,2,2,2,2])
y= np.array([39.18,41.19,41.59,36.64,37.55,36.68,32.66,33.76,32.74,35.48,34.31,38.63])
#zxc=np.array([3,4]) zxc=np.array([1,2])
#n=np.array([42.63, 39.09, 38.80, 34.59, 52.09, 48.49, 48.56, 45.01]) n=np.array([38.80, 34.59])
plt.scatter(x, y,color="green") plt.plot(zxc,n,color="yellow")
#x = np.array([5,5,5,5,5,5,6,6,6,6,6,6]) x = np.array([1,1,1,1,1,1,2,2,2,2,2,2])
y= np.array([53.42,51.59,52.16,50.86,54.93,49.58,45.54,47.67,50.32,50.62,47.50,49.34])
#zxc=np.array([5,6]) zxc=np.array([1,2])
#n=np.array([42.63, 39.09, 38.80, 34.59, 52.09, 48.49, 48.56, 45.01]) n=np.array([52.09, 48.49])
plt.scatter(x, y,color="black") plt.plot(zxc,n,color="orange")
#x = np.array([7,7,7,7,7,7,8,8,8,8,8,8]) x = np.array([1,1,1,1,1,1,2,2,2,2,2,2])
y= np.array([49.01,47.27,47.89,49.66,48.62,48.95,46.55,45.11,46.14,45.97,41.28,45.03])
#zxc=np.array([7,8]) zxc=np.array([1,2])
#n=np.array([42.63, 39.09, 38.80, 34.59, 52.09, 48.49, 48.56, 45.01]) n=np.array([48.56, 45.01])
plt.scatter(x, y,color="pink") plt.plot(zxc,n,color="magenta") plt.show()
Эффект пересечение факторов не наблюдается.
Задание 3
Наибольшая пара - пара 4-2:
Существуют только
In [48]: import math nij=[[],[],[],[]] s=[[],[],[],[]] kij=[[],[],[],[]]
for i in range(1,4+1): for j in range(1,2+1):
k=0 temp_s=0
for n in range(len(table[0])):
if (table[1][n]==i and table[2][n]==j): k+=table[0][n]
nij[i-1].append(k/6) kij[i-1].append(k)
print(nij)
for i in range(1,4+1): for j in range(1,2+1):
s[i-1].append(nij[i-1][j-1]-nij[3][1]) print(s)
sigma=0
for i in range(len(s)): sigma+=sum(s[i])
sigma=sigma/(48-8) print(sigma)
[[42.63333333333333, 39.093333333333334], [38.80500000000001, 34.596666666666664], [52.09, 48.498333333333335], [48.56666666666667, 45.01333333333334]]
[[-2.3800000000000097, -5.920000000000009], [-6.208333333333336, -10.416666666666679], [7.076666666666661, 3.4849999999999923], [3.5533333333333275, 0.0]] -0.2702500000000013
Отсюда получаем, что
Следовательно
Доверительные интервалы:
In [49]: xalpha=2.02
for i in range(len(nij)):
for j in range(len(nij[0])): print(nij[i][j]-((xalpha*s[i][j])/(math.pow(kij[i][j]-1,0.5))),nij[i][j]+((xalpha*s[i][j])/(math.pow(kij[i][j]-1,0.5))))
42.93451505716337 42.3321516095033
39.875814408932065 38.3108522577346
39.62864786788292 37.981352132117095
36.060649552751705 33.13268378058162
51.2801152877402 52.899884712259805
48.084940787882445 48.911725878784225
48.14546603540125 48.98786729793209
45.01333333333334 45.01333333333334
Задание 4
In [53]: e=[]
for i in range(len(table[0])): e.append(table[0][i]-nij[table[1][i]-1][table[2][i]-1])
e=sorted(e) print(sorted(e))
[-4.353333333333332, -3.7333333333333414, -2.9583333333333357, -2.663333333333334, -2.510000000000005, -2.1650000000000063, -2.125000000000007, -1.9366666666666674, -1.856666666666662, -1.2966666666666669, -1.2550000000000097, -1.230000000000004, -1.1133333333333297, -0.9983333333333348, -0.836666666
666666, -0.8283333333333331, -0.8233333333333306, -0.6766666666666694, -0.5, -0.28666666666666174, -0.2533333333333303, -0.013333333333335418, 0.016666666666658614, 0.05333333333332746, 0.06999999999999318, 0.09666666666665691, 0.3749999999999929, 0.38333333333333286, 0.44333333333332803, 0.596666666 666664, 0.8416666666666686, 0.8833333333333329, 0.9066666666666663, 0.9566666666666563, 1.0933333333333266, 1.126666666666658, 1.2966666666666669, 1.3299999999999983, 1.5366666666666546, 1.8066666666666649, 1.8216666666666654, 1.9866666666666646, 2.1216666666666626, 2.384999999999991, 2.6266666666666 65, 2.7849999999999966, 2.8399999999999963, 4.0333333333333385]
In [54]: #Гистограмма
from IPython.display import Image Image('5-2.png')
Out[54]:
По Колмогорову:
In [59]: import math
from scipy.stats import norm F=[]
F0=[] diff=[]
for i in range(len(e)): F.append((1/48)*(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.155820703649317
Отсюда получаем, что
Задание 5
вз
вз
вз
In [60]: #https://math.semestr.ru/group/two-factor.php
In [79]: temp=0 avgi=[]
for i in range(len(nij[0])): for j in range(len(nij)):
temp+=nij[j][i] avgi.append(temp/4) temp=0
avgj=[]
for i in range(len(nij)):
for j in range(len(nij[0])): temp+=nij[i][j]
avgj.append(temp/2) temp=0
print(avgi) print(avgj)
avg=((sum(avgi)/len(avgi))+(sum(avgj)/len(avgj)))/2 print(avg)
[45.52375, 41.80041666666667]
[40.86333333333333, 36.700833333333335, 50.29416666666667, 46.790000000000006] 43.662083333333335
In [62]: #Таблица 2
from IPython.display import Image Image('5-3.png')
Out[62]:
Подставив в формулы, получим:
Соответственно получаем:
In [80]: #Таблица 3
from IPython.display import Image Image('5-4.png')

Out[80]: