

Практическая работа №3 Регрессионный анализ
Выполнил студент . Вариант №11
Цель работы
Ознакомление с основными положениями метода наименьших квадратов (МНК), со статистическими свойствами МНК-оценок, с понятием функции регрессии и роли МНК в регрессионном анализе.
Постановка задачи
Результаты статистического эксперимента приведены в таблице 1. Требуется оценить характер (случайной) зависимости переменной |
от . |
|
||||||
1. |
Построить графически результаты эксперимента. Сформулировать линейную регрессионную модель переменной |
по переменной |
. Построить МНК-оценки параметров сдвига |
и масштаба . |
||||
|
Построить полученную линию регрессии. Оценить визуально соответствие полученных данных и построенной оценки. |
|
|
|
||||
2. |
Построить и интерпретировать несмещенную оценку дисперсии. На базе ошибок построить гистограмму с шагом |
. Проверить гипотезу нормальности ошибок на уровне значимости |
по . Оценить |
|||||
3. |
расстояние полученной оценки до класса нормальных распределений по Колмогорову. Визуально оценить данный факт. |
. Построить доверительный эллипс уровня доверия |
|
|||||
В предположении нормальности ошибок построить доверительные интервалы для параметров |
и |
уровня доверия |
для |
|||||
|
(вычислить его полуоси). |
|
|
|
|
|
|
|
4. |
Сформулировать гипотезу независимости переменной от переменной . Провести проверку значимости. |
|
|
|
|
|||
5. |
Сформулировать модель, включающую дополнительный член (полковник бустеренко) с |
. Построить МНК-оценки параметров |
в данной модели. Изобразить графически полученную |
|||||
|
регрессионную зависимость. |
|
|
|
|
|
|
|
6. |
Построить несмещенную оценку дисперсии. Провести исследование нормальности ошибок как в п.2. |
|
|
|
|
|
||
7. |
В предположении нормальности ошибок построить доверительные интервалы для параметров |
|
уровня доверия |
. Написать уравнение доверительного эллипсоида уровня доверия |
||||
|
. |
|
|
|
|
|
|
|
8. |
Сформулировать гипотезу линейной регрессионной зависимости переменной от переменной |
и проверить ее значимость на уровне . |
|
In [1]: #Таблица 1
from IPython.display import Image Image('3-1.png')
Out[1]:
In [117… 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]=[11.25,11.33,11.61,11.93,12.58,13.99,12.41,12.46,12.80,11.48,11.69,11.66,11.56,12.53,11.41,11.70,10.99,11.41,11.36,13.30,11.31,11.84,13.75,11.66,12.95,12.54,12.27,12.07 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]
[11.25, 11.33, 11.61, 11.93, 12.58, 13.99, 12.41, 12.46, 12.8, 11.48, 11.69, 11.66, 11.56, 12.53, 11.41, 11.7, 10.99, 11.41, 11.36, 13.3, 11.31, 11.84, 13.75, 11.66, 12.95, 12.5 4, 12.27, 12.07, 12.09, 12.21, 11.91, 13.29, 11.77, 11.83, 13.59, 13.18, 12.57, 14.1, 13.8, 13.34, 11.43, 11.47, 12.96, 11.95, 13.67, 12.6, 13.05, 13.82, 12.28, 10.98]
Выполнение работы
Каждый пункт работы выполняется с помощью кода.
Задание 1
Результаты эксперимента:
In [118… 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()
Линейная регрессионная зависимость:
Матричный вид:
МНК-оценка строится по формуле |
, где и - матрицы значений |
In [119… 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))
[[12.45340431]
[-0.04565931]]
Отсюда получаем, что
In [120… 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")
yi=[[],[]]
for i in range(len(table[0])): yi[0].append(table[0][i]) yi[1].append(table[0][i]*(-0.0456)+12.4534)
plt.plot(yi[0],yi[1],color="red")
plt.show()
Красная линия "примерно" следует тенденции расположения точек, у которых, как и у прямой, чем больше аргумент, тем меньше значение. Но при этом все равно разброс точек относительно прямой слишком велик, чтобы говорить о каком-либо соответствии.
Задание 2
Несмещенная оценка дисперсии строится согласно формуле:
, где
In [121… beta0=12.4534 beta1=-0.0456 rss=0
for i in range(len(table[0])): rss+=(table[1][i]-(beta0+(beta1*table[0][i])))**2
print(rss/(50-2))
0.7653080483333333
Отсюда получаем, что несмещенная оценка равна
Гистограмма ошибок:
In [122… beta0=12.4534 beta1=-0.0456 e=[]
for i in range(len(table[0])): e.append((table[1][i]-(beta0+(beta1*table[0][i]))))
e=sorted(e) print(e)
[-1.3821999999999992, -1.2810000000000006, -1.1121999999999996, -1.0977999999999994, -1.0934000000000008, -0.9778000000000002, -0.9410000000000007, -0.906600000000001, -0.8821999
999999992, -0.8610000000000007, -0.8010000000000002, -0.7477999999999998, -0.7477999999999998, -0.7066000000000017, -0.6654, -0.6166000000000018, -0.5466000000000015, -0.53540000 0000001, -0.47660000000000124, -0.4410000000000007, -0.3210000000000015, -0.2954000000000008, -0.29219999999999935, -0.2721999999999998, -0.26980000000000004, 0.0302000000000006 7, 0.0865999999999989, 0.09019999999999939, 0.10019999999999918, 0.14339999999999975, 0.17220000000000013, 0.18459999999999965, 0.2533999999999992, 0.28339999999999854, 0.3045999 9999999887, 0.4833999999999996, 0.5877999999999997, 0.7721999999999998, 0.7802000000000007, 0.8246000000000002, 0.8865999999999996, 0.973399999999998, 1.029, 1.2278000000000002, 1.3466000000000005, 1.3989999999999991, 1.4789999999999992, 1.5366, 1.5489999999999995, 1.7378]
In [13]: #Гистограмма
from IPython.display import Image Image('3-3.png')
Out[13]:
Проверка гипотезы нормальности ошибок:
Исходные данные:
In [29]: #Таблица 2
from IPython.display import Image Image('3-4.png')
Out[29]:
Отсюда получаем, что гипотеза |
- подходит. |
По Колмогорову:
In [123… import math
from scipy.stats import norm F=[]
F0=[] diff=[] s=0.7653
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.10634293858907695
Отсюда получаем, что
In [124… import matplotlib.pyplot as plt import numpy as np
a = np.array(F) b = np.array(F0)
plt.scatter(e,a, color="blue") plt.scatter(e,b, color="red")
plt.show()
Задание 3
Исходные данные:
Для :
, где
In [125… c=np.array([[1],[0]])
temp=(np.linalg.inv(np.dot(A,A.T)))
print(np.dot(np.dot(c.T,temp),c))
[[0.07927142]]
Отсюда получаем, что
, где |
- распределение Стьюдента с |
степенями свободы. |
Для :
, где
In [68]: c=np.array([[0],[1]])
temp=(np.linalg.inv(np.dot(A,A.T)))
print(np.dot(np.dot(c.T,temp),c))
[[0.00641355]]
Отсюда получаем, что
, где |
- распределение Стьюдента с |
степенями свободы. |
Доверительный эллипс:
, где
In [70]: c=np.array([[1,0],[0,1]])
temp=(np.linalg.inv(np.dot(A,A.T)))
print(np.dot(np.dot(c.T,temp),c)) print(np.linalg.inv(np.dot(np.dot(c.T,temp),c)))
[[ 0.07927142 -0.01949718]
[-0.01949718 0.00641355]] [[ 50. 152.] [152. 618.]]
Отсюда получаем, что |
; |
|||||||||
Функция эллипса: |
|
|||||||||
Где |
|
|||||||||
Отсюда получаем: |
|
|||||||||
Полуоси вычисляются согласно формулам: |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Задание 4
не зависит от
зависит от
Оценка зависимости:
, где
In [88]: rssh=0 avg=sum(table[1])/50 print(avg)
for i in range(len(table[0])): rssh+=(table[1][i]-avg)**2
print((rssh-rss)/(rss/48))
12.3146
0.42473835301731855
Отсюда получаем, что Критерий:
Для того, что бы принять нулевую гипотизу, нужно потребовать, что бы |
. |
Задание 5
Добавим :
Матричный вид:
МНК-оценка строится по формуле |
, где и - матрицы значений |
In [90]: import numpy as np X=[[],[],[]]
Y=[]
for i in range(len(table[0])): X[0].append(1) X[1].append(table[0][i]) X[2].append(table[0][i]**2) 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))
[[12.67803649]
[-0.27709069] [ 0.03874751]]
Отсюда получаем, что
Следовательно:
In [97]: 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")
yi=[[],[]]
for i in range(len(table[0])): yi[0].append(table[0][i])
yi[1].append(table[0][i]**2*(0.039)+table[0][i]*(-0.277)+12.678)
plt.scatter(yi[0],yi[1],color="red")
plt.show()
Если провести кривую через красные точки, то можно получить результат
Задание 6
Несмещенная оценка дисперсии строится согласно формуле:
, где
In [101… beta0=12.678 beta1=-0.277 rss=0
for i in range(len(table[0])): rss+=(table[1][i]-(beta0+(beta1*table[0][i])))**2
print(rss/(50-3))
1.202896127659574
Отсюда получаем, что
Гистограмма ошибок:
In [112… beta0=12.678 beta1=-0.277 e=[]
for i in range(len(table[0])): e.append((table[1][i]-(beta0+(beta1*table[0][i]))))
e=sorted(e) print(sum(e)/50)
0.4786799999999992
In [103… |
#Гистограмма |
|
from IPython.display import Image |
|
Image('3-5.png') |
Out[103… |
|
|
Проверка гипотезы нормальности ошибок:
Исходные данные:
In [105… |
#Таблица 3 |
|
from IPython.display import Image |
|
Image('3-6.png') |
Out[105… |
|
|
Отсюда получаем, что гипотеза |
- не подходит. |
По Колмогорову:
In [113… import math
from scipy.stats import norm F=[]
F0=[] diff=[] s=1.202
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.21006183013919943
Отсюда получаем, что
In [114… import matplotlib.pyplot as plt import numpy as np
a = np.array(F) b = np.array(F0)
plt.scatter(e,a, color="blue") plt.scatter(e,b, color="red")
plt.show()
Задание 7
Исходные данные:
Для :
, где
In [127… c=np.array([[1],[0],[0]])
import numpy as np
X=[[],[],[]]
Y=[]
for i in range(len(table[0])):
X[0].append(1)
X[1].append(table[0][i])
X[2].append(table[0][i]**2)
Y.append([])
Y[i].append(table[1][i])
A=np.array(X)
B=np.array(Y)
temp=(np.linalg.inv(np.dot(A,A.T)))
print(np.dot(np.dot(c.T,temp),c))
[[0.14230834]]
Отсюда получаем, что
, где |
- распределение Стьюдента с |
степенями свободы. |
Для :
, где
In [129… c=np.array([[0],[1],[0]])
import numpy as np
X=[[],[],[]]
Y=[]
for i in range(len(table[0])):
X[0].append(1)
X[1].append(table[0][i])
X[2].append(table[0][i]**2)
Y.append([])
Y[i].append(table[1][i])
A=np.array(X)
B=np.array(Y)
temp=(np.linalg.inv(np.dot(A,A.T)))
print(np.dot(np.dot(c.T,temp),c))
[[0.07332424]]
Отсюда получаем, что
, где |
- распределение Стьюдента с |
степенями свободы. |
Для :
, где
In [130… c=np.array([[0],[0],[1]])
import numpy as np
X=[[],[],[]]
Y=[]
for i in range(len(table[0])):
X[0].append(1)
X[1].append(table[0][i])
X[2].append(table[0][i]**2)
Y.append([])
Y[i].append(table[1][i])
A=np.array(X)
B=np.array(Y)
temp=(np.linalg.inv(np.dot(A,A.T)))
print(np.dot(np.dot(c.T,temp),c))
[[0.00187559]]
Отсюда получаем, что
, где |
- распределение Стьюдента с |
степенями свободы. |
Доверительный эллипс:
, где
In [131… c=np.array([[1,0,0],[0,1,0],[0,0,1]])
temp=(np.linalg.inv(np.dot(A,A.T)))
print(np.dot(np.dot(c.T,temp),c)) print(np.linalg.inv(np.dot(np.dot(c.T,temp),c)))
[[ |
0.14230834 |
-0.0844421 |
0.01087344] |
||
[-0.0844421 |
|
0.07332424 -0.01120255] |
|||
[ |
0.01087344 |
-0.01120255 |
0.00187559]] |
||
[[ |
50. |
152. |
618.] |
|
|
[ |
152. |
618. |
2810.] |
|
[618. 2810. 13734.]]
Отсюда получаем, что |
; |
|||||||||
Функция эллипса: |
|
|||||||||
Где |
|
|||||||||
Отсюда получаем: |
|
|||||||||
Полуоси вычисляются согласно формулам: |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Задание 8
не зависит от
зависит от
Оценка зависимости:
, где
In [132… rssh=0 avg=sum(table[1])/50 print(avg)
for i in range(len(table[0])): rssh+=(table[1][i]-avg)**2
print((rssh-rss)/(rss/47))
12.3146
0.4158896373294578
Отсюда получаем, что Критерий:
Для того, что бы принять нулевую гипотизу, нужно потребовать, что бы |
. |
Гипотеза подходит, поскольку