Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
| Download

Домашние задания в R

Project: STAT
Path: R / HW_2 / R_HW_2.rnw
Views: 5412
1
\documentclass[a4paper, 11pt]{article}
2
\usepackage[T2A]{fontenc} % кодировка
3
\usepackage[utf8]{inputenc} % кодировка исходного текста
4
\usepackage[english,russian]{babel} % локализация и переносы
5
\usepackage{indentfirst}
6
\frenchspacing
7
\usepackage{geometry}
8
\geometry{left=2cm, right=1.5cm, top=2cm, bottom=1.5cm}
9
\usepackage{soul}
10
%%% Дополнительная работа с математикой
11
\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools,bm} %
12
\usepackage{icomma} % "Умная" запятая: $0,2$ --- число, $0, 2$ --- перечисление
13
\usepackage{etoolbox}
14
\usepackage{enumitem}
15
\usepackage{array,tabularx,tabulary,booktabs} % Дополнительная работа с таблицами
16
\usepackage{longtable} % Длинные таблицы
17
\usepackage{multirow} % Слияние строк в таблице
18
19
\usepackage{lastpage}
20
21
\usepackage{url}
22
\begin{document}
23
24
% learn more about knitr: https://yihui.name/knitr/
25
26
<<setup, include=FALSE, cache=FALSE>>=
27
library(knitr)
28
opts_chunk$set(cache=TRUE, autodep=TRUE)
29
options(formatR.arrow=TRUE, width=90)
30
@
31
32
\title{Линейная регрессия в R}
33
34
\author{Варвара Кожухова}
35
36
\maketitle
37
38
\section*{Задание}
39
\begin{enumerate}
40
\item Загрузить набор данных для своего варианта, ознакомиться с его содержимым.
41
\item Построить график корреляционного поля для каждого фактора.
42
\item Построить уравнение парной линейной регрессии для каждого фактора.
43
\item Проверить значимость каждого из полученных уравнений регрессии. Показать уравнения регрессии с заданным в варианте доверительным интервалом на графиках.
44
\item Построить прогнозы по каждому из уравнений парной регрессии для заданных в варианте значений факторов.
45
\item Построить уравнение множественной линейной регрессии и получить корреляционную матрицу.
46
\item Построить прогноз по уравнению множественной регрессии для заданных в варианте значений факторов.
47
48
\end{enumerate}
49
50
\section*{Варианты}
51
\noindent \begin{tabularx}{\textwidth}{|X|X|X|X|X|X|} \hline
52
варианта & 1 & 2 & 3 & 4 & 5 \\ \hline
53
Набор данных & airquality & state.x77 & Cars93\footnote{необходимо подключить библиотеку MASS} & Cars93 & Cars93 \\ \hline
54
y & Ozone & Life Exp\footnote{поскольку в названии переменной нельзя использовать символ пробела, данную переменную необходимо переименовать командой colnames, например, в $Life\_Exp$, либо обращаться к ней по номеру столбца [,4].} & Price & Min.Price & Max.Price \\ \hline
55
Факторы и их значения для прогноза & Solar.R = 350, Wind = 8,3, Temp = 80 & Illiteracy = 1,0, Murder = 12, Income = 4000 & Horsepower = 200, RPM = 5200, Passengers = 4 & Horsepower = 210, RPM = 5500, Passengers = 4 & Horsepower = 220, RPM = 6000, Passengers = 6 \\ \hline
56
варианта & 6 & 7 & 8 & 9 & 10 \\ \hline
57
Набор данных & stackloss & longley & longley & LifeCycleSavings & Anscombe\footnote{необходимо подключить библиотеку car} \\ \hline
58
y & stack.loss & GNP & Employed & sr & education \\ \hline
59
Факторы и их значения для прогноза & Air.Flow = 55, Water.Temp = 20, Acid.Conc = 89 & Unemployed = 221, Armed.Forces = 180, Population = 125 & GNP.deflator = 102, Armed.Forces = 170, Population = 110 & pop15 = 35,5, pop75 = 1,5, dpi = 2500, ddpi = 2,15 & income = 3200, young = 347,8, urban = 425 \\ \hline
60
\end{tabularx}
61
62
\section*{Парная линейная регрессия}
63
64
Рассмотрим построение парной линейной регрессии на встроенном наборе данных cars. Будем рассматривать зависимость длины тормозного пути (переменная dist) от скорости (переменная speed). Построим график зависимости длины тормозного пути от скорости автомобиля.
65
66
<<libs, message=FALSE, echo=FALSE>>=
67
library("psych")# описательные статистики
68
library("lmtest") # тестирование гипотез в линейных моделях
69
library("ggplot2")# графики
70
library("dplyr") # манипуляции с данными
71
library("MASS") # подгонка распределений
72
@
73
74
<<df1, fig.width=4, fig.height=4>>=
75
d <- cars
76
qplot(data=d, speed, dist) +
77
geom_point(aes(x=d$speed, y=d$dist), size = 1) + theme_bw(base_size = 12) +
78
xlab("speed, miles/h") + ylab("distance, feet") +
79
labs(title = "scatter plot")
80
@
81
82
Оценим модель линейной регрессии длины тормозного пути на скорость автомобиля.
83
Для этого командой lm поместим в переменную model модель линейной регрессии, указав dist в качестве зависимой переменной, и через значок ~ переменную speed в качестве регрессора.
84
85
Тип lm представляет собой список из 12 элементов. Посмотрим на коэффициенты уравнения линейной регрессии.
86
87
<<df2>>=
88
model <- lm(data=d, dist~speed) # базовый пакет stats
89
model$coefficients
90
@
91
92
(Intercept) это константа в уравнении регрессии, speed коэффициент регрессии.
93
Таким образом, уравнение регрессии имеет вид:
94
\[dist_i^m = -17.579 + 3.9324 \cdot speed_i\]
95
96
Так же можно посмотреть значения вектора ошибок модели разницу между реальной длиной тормозного пути dist и полученной по модели $dist_i^m$. Выведем первые 10 значений этого вектора с точностью две цифры после запятой. Более полный набор расчетов по модели можно получить командой summary.
97
98
<<df3>>=
99
options(digits = 3)
100
model$residuals[1:10]
101
summary(model) # базовый пакет base
102
@
103
104
Помимо коэффициентов регрессии, R выводит:
105
\begin{itemize}
106
\item стандартные ошибки коэффициентов (Std. Error);
107
\item наблюдаемые значения t-критерия при проверке значимости коэффициентов регрессии (t value);
108
\item P-значения для коэффициентов регрессии (P-value).
109
\end{itemize}
110
Звездочками или точками в столбце справа R показывает значимость или незначимость коэффициентов: *** значимы на уровне значимости менее 0.001; ** значимы на уровне значимости 0.001; * значимы на уровне значимости 0.01; . значимы на уровне значимости 0.05 и т.д. Эти обозначения приведены в разделе Signif. codes.
111
Коэффициент детерминации (Multiple R-squared) равен 0.6511; скорректированный коэффициент детерминации (Adjusted R-squared) равен 0.6438. Наблюдаемое значения F-критерия проверки значимости уравнения в целом и P-значение:
112
113
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12
114
115
Таким образом, уравнение регрессии получилось значимым.
116
Проведем на графике полученную линию регрессии с 95\% доверительными интервалами.
117
118
<<df4, fig.width=4, fig.height=4>>=
119
qplot(data = d, speed, dist) + stat_smooth(method="lm", level = 0.95) +
120
theme_bw(base_size = 12)
121
@
122
123
Рассчитаем также 95\% доверительные интервалы для параметров линейной регрессии. Полученные по модели значения можно вывести командой fitted.
124
<<df5>>=
125
confint(model, level = 0.95) # базовый пакет stats
126
options(digits=4)
127
fitted(model) # базовый пакет stats
128
@
129
130
Рассчитать необъясненную сумму квадратов отклонений и полную сумму квадратов можно, воспользовавшись функцией deviance и уже известными функциями sum и mean. Для того, чтобы построить прогноз по полученной модели, нужно задать значения регрессора и поместить их в новый data.frame.
131
132
<<df6>>=
133
RSS <- deviance(model) # базовый пакет stats
134
TSS <- sum((d$dist-mean(d$dist))^2)
135
RSS; TSS
136
# создаем новый набор данных
137
nd <- data.frame(speed=c(40,60))
138
# Строим прогноз функцией predict
139
predict(model,nd)
140
@
141
142
\section*{Множественная линейная регрессия}
143
144
Рассмотрим встроенный набор данных по социально-экономическим показателям в 47 провинциях Швейцарии в 1888 г. Этот набор данных содержит 6 переменных по 47 наблюдений, каждая из которых измеряется в процентах (help(swiss)):
145
Fertility рождаемость;
146
Agriculture % мужчин, занятых в сельском хозяйстве;
147
Examination % призывников, получивших высшую оценку на экзамене в армии;
148
Education % призывников, имеющих образование помимо начального;
149
Catholic % католиков среди населения;
150
Infant.Mortality % детей, умерших до года.
151
Посмотрим на этот набор данных.
152
153
<<df1_1>>=
154
t <- swiss # встроенный набор данных по Швейцарии
155
glimpse(t)
156
@
157
158
Встроенный пакет graphics содержит функцию pairs, позволяющую получить все возможные диаграммы рассеяния на одном графике, а также выполнить их сглаживание с помощью опции panel.smooth:
159
<<df1_2, fig.width=7, fig.height=7>>=
160
pairs(swiss, panel = panel.smooth)
161
@
162
163
Функция cor позволяет как вычислить корреляцию между двумя выборками, так и получить корреляционную матрицу для всех переменных из набора данных.
164
165
<<df1_3>>=
166
options(digits = 5)
167
cor(swiss)
168
@
169
170
Существует еще одна функция, позволяющая получить корреляционную матрицу, диаграммы рассеяния и сглаженные распределения одновременно.
171
<<df1_5, fig.width=7, fig.height=7, message=FALSE, warning=FALSE>>=
172
library("GGally")
173
ggpairs(t) # функция из пакета GGally
174
@
175
176
Чтобы оценить регрессию рождаемости на остальные переменные, можно воспользоваться уже знакомой функцией lm, а регрессоры перечислить через знак «плюс»:
177
<<df1_6>>=
178
model2 <- lm(data=t, Fertility~Agriculture+Education+Catholic)
179
@
180
В данном случае регрессорами стали \% занятых в с/х, \% католического населения и \% имеющих образование выше начального.
181
182
Получить оценки коэффициентов уравнения регрессии, а также проверить основные гипотезы поможет функция summary:
183
<<df1_7>>=
184
summary(model2)
185
@
186
Построим прогноз по аналогии с парной линейной регрессией. Отличие заключается лишь в том, что в наборе данных необходимо указать значения каждого фактора.
187
<<df1_8>>=
188
# создаем новый набор данных
189
nd2 <- data.frame(Agriculture=0.5, Catholic=0.5, Education=20)
190
predict(model2,nd2)
191
@
192
193
Построение прогноза по нескольким точкам выполняется с помощью векторов значений.
194
<<df1_9>>=
195
# создаем новый набор данных
196
nd2 <- data.frame(Agriculture=c(0.5,0.8), Catholic=c(0.5, 0.65), Education=c(20, 25))
197
# прогнозируем
198
predict(model2,nd2)
199
@
200
201
\end{document}
202
203
204
205