9. Линейная регрессия

1. В течении недели с понедельника по воскресенье торговая точка производила замеры среднесуточной температуры воздуха $t$ и количества потребляемого мороженного в литрах на человека $ic$. Предполагается следующая зависимость $ic = \theta_1+\theta_2t+\theta_3t^2w$, где $w = 1$, если день выходной, и $w = 0$ иначе. Получились следующие значения

пн вт ср чт пт сб вс пн вт ср
$t$ 10 13 17 20 19 21 14 8 5 10
$ic$ 1 1.2 1.5 1.4 1.6 2.1 1.7 0.9 0.7 1.1

Найдите оценку $\theta = (\theta_1, \theta_2, \theta_3)$ методом наименьших квадратов, значение RSS и предсказание отклика при температурах 15 и 40 в будний и выходной дни. Нарисуйте графики зависимости $ic$ от $t$ для будних и выходных дней. Задание можно выполнить в Python.

Оценка методом наименьших квадратов


In [1]:
import numpy

In [13]:
T = numpy.array([10, 13, 17, 20, 19, 21, 14, 8, 5, 10])
wT = T * [0, 0, 0, 0, 0, 1, 1, 0, 0, 0]
X = numpy.zeros((10, 3))
X[:, 0] = numpy.ones(10).T
X[:, 1] = T.T
X[:, 2] = (wT ** 2).T
Y = numpy.array([1, 1.2, 1.5, 1.4, 1.6, 2.1, 1.7, 0.9, 0.7, 1.1]).T

In [17]:
Theta = numpy.linalg.inv(X.T @ X) @ X.T @ Y
print('Theta =', Theta)


Theta = [ 0.52001035  0.05243188  0.00128215]

Вычисление RSS


In [32]:
RSS = (Y - X @ Theta).T @ (Y - X @ Theta)
print(RSS)


0.10206574427

Вычисление отклика


In [36]:
Xa = numpy.array([1, 15, 225])
wYa = Xa.T @ Theta
print('t = 15, w = 1:\t', wYa)


t = 15, w = 1:	 1.59497210433

In [37]:
Xb = numpy.array([1, 15, 0])
wYb = Xb.T @ Theta
print('t = 15, w = 0:\t', wYb)


t = 15, w = 0:	 1.30648854064

In [38]:
Xc = numpy.array([1, 40, 1600])
wYc = Xc.T @ Theta
print('t = 40, w = 1:\t', wYc)


t = 40, w = 1:	 4.66872419446

In [39]:
Xd = numpy.array([1, 40, 0])
wYd = Xd.T @ Theta
print('t = 40, w = 0:\t', wYd)


t = 40, w = 0:	 2.61728551932