Добавил:
north memphis Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИДЗ_5 / STATAN_IDZ_5

.pdf
Скачиваний:
3
Добавлен:
24.12.2024
Размер:
259.45 Кб
Скачать

Практическая работа №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]:

Соседние файлы в папке ИДЗ_5