CoCalc Public FilesR / HW_1 / R_HW_1.rnwOpen with one click!
Author: Varvara Kozhukhova
Description: Основы работы в R
Compute Environment: Ubuntu 18.04 (Deprecated)
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
16
\usepackage{lastpage}
17
18
\usepackage{url}
19
\begin{document}
20
21
% learn more about knitr: https://yihui.name/knitr/
22
23
<<setup, include=FALSE, cache=FALSE>>=
24
library(knitr)
25
opts_chunk$set(cache=TRUE, autodep=TRUE)
26
options(formatR.arrow=TRUE, width=90)
27
@
28
29
\title{Основы работы с R. Обработка статистических данных}
30
31
\author{Варвара Кожухова}
32
33
\maketitle
34
35
\section*{Задание}
36
\begin{enumerate}
37
\item Загрузить данные для своего варианта в переменную-вектор.
38
\item Получить справочную информацию по своим данным, просмотреть их содержимое.
39
\item Проверить, есть ли среди данных пропуски.
40
\item Создать новую переменную-вектор, в которой будут 1, если значение в исходном векторе больше среднего, и –1 если значение переменной меньше среднего и 0 если значение равно среднему.
41
\item Вывести описательную статистику.
42
\item Построить графики абсолютных частот и плотности распределения.
43
\end{enumerate}
44
45
\section*{Варианты}
46
\noindent \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|} \hline
47
варианта & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\ \hline
48
Набор данных & \multicolumn{2}{|c|}{CO2} & \multicolumn{2}{|c|}{ChickWeight} & \multicolumn{2}{|c|}{Orange} & \multicolumn{2}{|c|}{airquality} & \multicolumn{2}{|c|}{faithful} \\ \hline
49
Имя вектора & conc & uptake & weight & Time & age & circumference & Wind & Temp & eruptions & waiting \\ \hline
50
\end{tabular}
51
52
\section*{Первые шаги в R}
53
54
Рассмотрим основные выражения в R: числа, строки и логические переменные. Можно использовать R как калькулятор, например:
55
56
<<calc-R>>=
57
1+1
58
6*7
59
sqrt(16)
60
@
61
62
Строки печатаются в кавычках: двойных или одинарных.
63
64
<<string-simple>>=
65
"Hello world!"
66
'Hello world!'
67
@
68
69
Логические выражения возвращают TRUE или FALSE. Чтобы сравнить два выражения, используется двойной знак равенства. Как и в других языках программирования, можно сохранять значения в переменную. Сохраним 42 в переменную $x$, а 5 -- в переменную $X$, но в обратную сторону. Можно так же повторно назначить любое значение переменной в любое время. R чувствителен к регистру: переменные $x$ и $X$ это разные переменные.
70
71
<<logic>>=
72
3 < 4
73
2 + 2 == 5
74
x <- 42
75
5 -> X
76
@
77
78
Чтобы вызвать функцию, нужно обратиться к ней по имени, указав в скобках нужные аргументы.
79
80
<<func>>=
81
sum(1, 3, 5)
82
@
83
84
Получить помощь по функции можно командой help(functionname) или ?functionname.
85
86
Зададим вектор $y$ с помощью функции c (сокр. от англ. Combine). NA это пропущенное наблюдение (от англ. Not Available). Его не следует путать с NaN (Not a Number «не число», неопределенность). Попробуем просуммировать элементы вектора $y$. Необязательным аргументом функции sum является na.rm (сокр. от англ. Remove NA), по умолчанию равный FALSE. Если указать для него значение «истина», то функция суммы будет складывать все элементы вектора, исключая пропущенные.
87
88
<<vector1>>=
89
y <- c(-3, 2, NA, 5)
90
y
91
0/0
92
sum(y); sum(y, na.rm = TRUE)
93
@
94
95
Последовательность чисел можно задать двумя способами: start:end либо функцией seq(). Обращаться к элементам вектора можно, используя квадратные скобки, либо можно задать элементам вектора имена.
96
97
<<seqs1>>=
98
5:9 ; seq(5,9)
99
seq(10,50, by = 10)
100
sentence <- c('mack', 'the', 'knife')
101
sentence[3]
102
sentence[c(1,3)]
103
ranks <- 1:3
104
names(ranks) <- c("first", "second", "third")
105
ranks
106
ranks["first"]
107
@
108
109
В основном в R работают с наборами данных. Такая структура носит в R название data.frame и представляет собой таблицу, в которой каждый столбец это некоторая переменная, а каждая строка это одно наблюдение. Создадим в режиме скрипта data.frame. Пусть имеются наблюдения за ростом и весом некоторых людей. Зададим два вектора:
110
111
<<vectors2>>=
112
rost <- c(160, 175, 155, 190, NA)
113
ves <- c(NA, 70, 48, 85, 60)
114
@
115
116
И объединим их в набор данных, который поместим в переменную df, а затем выведем на экран. Обращаться к конкретным наблюдениям df можно, используя квадратные скобки.
117
118
<<df1>>=
119
df <- data.frame(rost, ves)
120
df
121
df[3,1]
122
@
123
124
Обращаться к переменным можно, используя знак \$ или указывая столбец с пропуском номера строки.Обращаться к наблюдениям можно, указывая конкретную строку и пропуская номер столбца.
125
<<df2>>=
126
df$rost
127
df[ ,1] ; df[4,]
128
@
129
130
Основные описательные статистики (среднее, стандартное отклонение и медиану) можно получить с помощью функций mean, sd и median.
131
<<df3>>=
132
mean(df$rost, na.rm = T)
133
sd(df$rost, na.rm = T)
134
median(df$rost, na.rm = T)
135
@
136
137
Подключим дополнительные пакеты для работы со статистикой.
138
<<libs, message=FALSE>>=
139
library("psych")# описательные статистики
140
library("lmtest") # тестирование гипотез в линейных моделях
141
library("ggplot2")# графики
142
library("dplyr") # манипуляции с данными
143
library("MASS") # подгонка распределений
144
@
145
Поместим в переменную $d$ встроенный в R набор данных по автомобилям. В этом наборе данных 50 наблюдений и две переменных (скорость, миль/час и длина тормозного пути в футах). Теперь d имеет тип данных data.frame (набор данных). Командой glimpse можно посмотреть на этот набор данных, в результате чего будут перечислены все переменные и типы данных. Переменные speed и dist имеют тип данных dbl (double) и содержат по 50 наблюдений. Для других типов данных используются следующие сокращения: chr (character/string), int (integer), fctr (factor), tims (time), lgl (logical).
146
147
<<cars1>>=
148
d <- cars
149
glimpse(d)
150
@
151
152
Посмотрим на первые шесть и последние шесть наблюдений набора данных d ("голова" и "хвост" набора данных).
153
154
<<cars2>>=
155
head(d)
156
tail(d)
157
@
158
159
Получим таблицу с описательными статистиками: среднее, мода, медиана, стандартное отклонение, минимум/максимум, асимметрия, эксцесс и т.д.
160
161
<<cars3>>=
162
describe(d) # функция из пакета psych
163
@
164
165
Построим гистограмму абсолютных частот для переменной dist (длины тормозного пути).
166
Воспользуемся функцией qplot, задав источник данных d (аргумент data), переменную для построения графика (dist), подпишем оси (параметры функции xlab и ylab) и название графика (параметр main).
167
168
<<cars4, warning=FALSE, fig.width=3, fig.height=3>>=
169
qplot(data=d, dist) # функция из пакета ggplot2
170
@
171
172
Можно построить так же гистограмму плотности распределения.
173
174
<<cars5, warning=FALSE, fig.width=4, fig.height=4>>=
175
# функция из базового пакета graphics
176
p <- hist(d$dist, probability = TRUE, col="grey")
177
@
178
179
Подгоним плотность распределения Вейбулла, поместив результат (оценки параметров распределения) в переменную fit. Переменная fit теперь представляет собой список (List) из 5 элементов. Доступ к элементам списка можно получить через значок доллара \$. Оценки двух параметров распределения Вейбулла были рассчитаны методом максимального правдоподобия. Просмотрим их, обратившись к элементу списка fit.
180
181
<<cars6>>=
182
fit <- fitdistr(d$dist, "weibull") # функция из пакета MASS
183
fit$estimate
184
@
185
186
Покажем на том же графике теоретическую плотность распределения Вейбулла.
187
Первый аргумент функции lines это значения по оси абсцисс, на основе которых будет построен график. Далее указывается функция плотности dweibull. Для нее нужно указать значения аргумента для расчета и значения двух параметров распределения: коэффициент формы (shape) и масштаба (scale).
188
189
<<cars7, fig.width=4, fig.height=4>>=
190
p <- hist(d$dist, probability = TRUE, col="grey")
191
xvals <- seq(0, 120, .20) # значения по оси абсцисс от 0 до 120 с шагом 0,2
192
lines(xvals, dweibull(xvals, shape=fit$estimate[1], scale=fit$estimate[2]))
193
@
194
195
\end{document}
196
197
198