R - Index of

advertisement
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ»
Кафедра информатики и процессов управления (№17)
Дисциплина «Прикладное ПО»
для студентов факультета КиБ,
3-й курс, 5-й семестр.
Методические указания
Занятие 9
Основы работы с R
Содержание
Основы работы с R ........................................................................ 1
Конфигурация программного комплекса для работы с комплексом
программ статистической обработки R ...................................................... 2
Простейший вариант ........................................................................................... 2
R Commander ........................................................................................................... 2
Многооконное рабочее пространство RStudio .............................................. 3
Профессиональная конфигурация ..................................................................... 4
Настройка программной среды ................................................................... 5
Элементарные сведения о языке R ............................................................ 7
Некоторые примеры ...................................................................................... 7
Простейшая регрессия ........................................................................................ 7
Квантили для нормального распределения .................................................... 8
Обработка фактических данных ..................................................................... 10
Основы языка, примеры команд ............................................................... 12
Подготовка к заданию «Карта» .................................................................. 17
Итоговое задание (8 баллов) ...................................................................... 20
Индивидуальные варианты ....................................................................... 21
Приложение 1. Критерии оценки задания ................................................ 21
Приложение 2. Перевод терминов............................................................. 22
Приложение 3. Демонстрация алгоритмов расчета качества модели из
третьего упражнения ................................................................................... 22
1
Конфигурация программного комплекса для работы с
комплексом программ статистической обработки R
Существует много вариантов организации пользовательского рабочего
пространства для работы с R.
Простейший вариант
В минимальной конфигурации достаточно установить RServer и работать в
командной строке.
RSERVER
Дистрибутив RServer доступен на https://cran.rstudio.com/ . Функционально
эта минимальная конфигурация обеспечивает все возможности, которые
может дать R. Дополнительно, по ходу работы, можно подкачать из облака
необходимые именно Вам библиотеки (пакеты). Всего в облаке лежит несколько
тысяч пакетов, обеспечивающие все методы статистической обработки и
визуализации. Однако, не все пользователи любят работать в командной строке,
поэтому ниже перечислены некоторые способы улучшения интерфейса.
R Commander
RCommander позволяет автоматизировать наиболее распространенные
задачи,
возникающие
при
статистической
обработке,
анализе
и
прогнозировании.
RCOMMANDER
RSERVER
2
RCommander является одним из пакетов расширения и входит в
большинство дистрибутивов RServer. Если Ваш дистрибутив не содержит пакет
Rcmdr, то необходимо выбрать ближайшее зеркало CRAN (в меню «Пакеты»),
видимо, Российское зеркало; а после этого установить пакет командой:
install.packages("Rcmdr", dependencies=TRUE)
Или можно установить через меню "Пакеты > Установить пакет…"
Запуск RCommander происходит при загрузке пакета Rcmdr через меню
"Пакеты > Включить пакет…"
или командой:
library(Rcmdr)
Если же библиотека Rcmdr
происходит командой Commander()
уже загружена, то запуск RCommander
Многооконное рабочее пространство RStudio
RStudio обеспечивает графический интерфейс пользователя, аналогичный
рабочей среде Matlab.
RSTUDIO
RCOMMANDER
RSERVER
Дистрибутив RStudio Desktop доступен на
https://www.rstudio.com/products/rstudio/download/ . Предварительно необходимо
установить RServer.
В ходе знакомства с R мы будем ориентироваться именно на эту
конфигурацию.
3
Профессиональная конфигурация
Наибольшую функциональность можно обеспечить, если включить в
конфигурацию редактор дашбордов.
DASHBOARD Editor
RSTUDIO
RCOMMANDER
RSERVER
4
Настройка программной среды
Для того, чтобы приступить к работе, достаточно запустить RStudio, при
этом RServer запускать нет необходимости.
При первом запуске необходимо настроить среду под себя. В Global
Options укажите (/выберите) рабочую директорию, например, ~/R, где ~ это
общепринятая ссылка на домашнюю директорию пользователя:
На закладке Packages выберите ближайшее зеркало, откуда будут
устанавливаться необходимые пакеты:
Для R разработано более 7 тысяч пакетов, содержащих десятки тысяч
функций, естественно, что устанавливать нужно только те пакеты, которые Вы
собираетесь использовать.
Нам потребуется пакет для визуализации пространственных данных (sp),
поэтому вызовите меню Tools-Install Packages... :
5
Или, альтернативно, это же можно сделать, набрав команду:
install.packages("sp", dependencies = TRUE)
Установленные библиотеки в дальнейшем можно подгружать по мере
необходимости их использования в конкретной сессии работы с R :
library(sp)
Команды можно набирать в командной строке, или создать .R-файл и
выполнить его (построчно, или целиком).
Пример работы с .R-файлом и варианты запуска скрипта:
Пример работы в командной строке (в консоли):
6
Элементарные сведения о языке R
Язык R во многом похож на остальные языки, но нем есть некоторые
особенности, которые выглядят необычно.
Первая особенность – это оператор присвоения (вместо = здесь
используется комбинация <- , это перенаправление вывода в переменную).
В R это выглядит так:
sin(0.5) # вывод значение на консоль
a <- sin(0.5) # вывод значение в переменную «a», то есть присвоение
(a <- sin(0.5) ) # присвоение и вывод на экран
A<-3; b<-5; c<-8
# три команды в строке
Вторая особенность – это функция соединения (concatenate) ,
записывается c( , ). Она универсально используется для записи и формирования
массивов, векторов, строк, матриц, списков.
Некоторые примеры
Простейшая регрессия
Построим модель, как растет прибыль по мере роста компании.
Правильнее всего было бы использовать русские имена (смотри листинг):
год <- c(2009, 2010, 2011, 2012, 2013, 2014, 2015)
прибыль <- c(5.80, 5.90, 6.60, 6.93, 7.62, 8.50, 9.34)
cor(год,прибыль)
plot(год,прибыль)
модель <- lm(прибыль ~ год)
abline(модель)
Но тогда придется переключаться между регистрами, поэтому давайте
набирать так:
year <- c(2009, 2010, 2011, 2012, 2013, 2014, 2015)
(Создали вектор с годами)
profit <- c(5.80, 5.90, 6.60, 6.93, 7.62, 8.50, 9.34)
(Создали вектор со значениями прибыли за соответствующий год)
cor(year,profit)
[1] 0.98134
(Рассчитали коэффициент корреляции, убедились, что он (по модулю)
близок к 1). Это означает, что линейная модель будет хорошо описывать
взаимную зависимость этих двух переменных.
plot(year,profit)
(нанесли фактические точки на график)
7
fit <- lm(profit ~ year)
(Построили линейную регрессионную модель прибыли по годам). Для
построения линейной модели используется функция lm(). Это сокращение от
Linear Model.
abline(fit)
(Добавили модель на существующий график)
Квантили для нормального распределения
Для генерации случайных чисел с нормальным распределением
используется функция rnorm(). Если набрать rnorm и встать на нее курсором, то
по нажатию F1 появится HELP по этой функции. В R имеется десятки тысяч
функций, запомнить синтаксис всех невозможно, поэтому надо научиться
использовать HELP. В данном случае мы видим, что если не указать среднее
значение и дисперсию, то по умолчанию будут подставлены 0 и 1
соответственно.
8
Сгенерируем 1000 точек по нормальному закону и выведем их на график:
plot(rnorm(1000))
Мы видим, что точки лежат в диапазоне (-3, 3), что совпадает с нашим
представлением о «правиле трех сигм».
А теперь построим график сравнения квантилей у полученной случайной
выборки по сравнению с истинным нормальным распределением.
qqnorm(rnorm(1000))
График практически линейный, это говорит о хорошем качестве генератора
случайных чисел.
9
Обработка фактических данных
В этом примере будем использовать данные по давлению, измеренному у
некоторой выборки людей с разным возрастом. Данные записаны в файл data.txt
Обычно, работа с фактическими данными в R происходит с
использованием творческих способностей человека: надо пробовать разные
методы, пробовать применять те или иные фильтры, смотреть и сравнивать
результаты. Проделаем это на примере ниже.
my_data<-read.table("data.txt",header=FALSE,sep="\t")
(Считаем данные в таблицу my_data из файла с разделителямитабуляция)
str(my_data)
'data.frame':31 obs. of 3 variables:
$ V1: int 1 2 3 4 5 6 7 8 9 10 ...
$ V2: int 39 47 45 47 65 46 67 42 67 56 ...
$ V3: int 144 220 138 145 162 142 170 124 158 154 ...
(Посмотрим, что у нас импортировалось, это команда просмотра структуры
объекта). Мы видим, что в таблице три переменных и 31 наблюдение
(observation). Все переменные без имени (мы научимся присваивать имена
позже). Они имеют условные названия V1, V2 и V3. При этом V1 – это номер
пациента, V2 – его возраст, V3 – давление.
analyzed_data<-lm(V3 ~ V2, data=my_data)
(построим линейную регрессионную модель)
summary(analyzed_data)
Call: lm(formula = V3 ~ V2, data = my_data)
Residuals:
Min 1Q Median 3Q Max
-79.352 -8.651 -0.685 7.752 79.039
Coefficients:
Estimate
Std. Error t value Pr(>|t|)
(Intercept) 113.9499 12.9145 8.823 1.04e-09 ***
V2
0.5747 0.2641 2.176 0.0378 *
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 23.46 on 29 degrees of freedom
Multiple R-squared: 0.1404,
Adjusted R-squared: 0.1107
F-statistic: 4.736 on 1 and 29 DF, p-value: 0.03783
(Посмотрим характеристики и показатели качества построенной модели).
Мы видим коэффициенты линейной модели (113.9499 и 0.5747), квартили для
отклонений и другие параметры.
10
plot(resid(analyzed_data)~fitted(analyzed_data),xlab="fitted
values",ylab="residuals")
Смотрим график различий между моделью и экспериментальными
данными. Мы видим две точки (я их выделил красным), которые имеют
большую ошибку.
qqnorm(resid(analyzed_data))
Строим график qqplot, знакомый нам по предыдущему упражнению. На нем
тоже видны две точки, отклоняющиеся от нормы.
analyzed_data<-lm(V3 ~ V2 , data=my_data[-c(2,13),])
11
(строим новую модель, убрав из анализа вторую и тринадцатую строчки,
поскольку они возможно содержат ошибку)
print(analyzed_data)
Call: lm(formula = V3 ~ V2, data = my_data)
Coefficients:
(Intercept)
V2
97.0771
0.9493
(Распечатаем новые коэффициенты линейной модели). Они сильно
отличаются от первоначальных, которые, как мы помним, были: (113.9499 и
0.5747)
plot(resid(analyzed_data)~fitted(analyzed_data),xlab="fitted
values",ylab="residuals")
qqnorm(resid(analyzed_data))
(повторное построение тех же графиков, чтобы убедиться в высоком
качестве новой модели)
Основы языка, примеры команд
Будем обучаться по мере непосредственной работы в R. Здесь приведены
команды, которые предлагается набрать, увидеть реакцию R, прочитать
объяснения.
2+2
[1] 4
(если набрать формулу, то результат запишется на экране)
EXP(2)
Error: could not find function "EXP"
(Система чувствительна к регистру)
exp(2)
[1] 7.389056
(Теперь все правильно)
rnorm(10, 5, 1)
[1] 5.238160 5.312314 5.852712 6.154289 7.032184 5.297716 5.371424 5.716173 6.077
298
[10] 5.895472
(генератор 10 случайных чисел по нормальному закону с мат-ожиданием 5 и дисперсией
1)
x<-2
(оператор присвоения, аналог х = +2 )
x
[1] 2
(посмотреть переменную)
x+x
[1] 4
(посмотреть результат вычислений)
y<-5
(оператор присвоения, аналог y = +5 )
12
x*y
[1] 10
(посмотреть результат вычислений)
weight <- c(60, 72, 57, 90, 95, 72)
(оператор присвоения, создан вектор, туда записан вес студентов )
weight
[1] 60 72 57 90 95 72
(посмотреть вектор)
height <- c(1.75, 1.80, 1.65, 1.90, 1.74, 1.91)
(оператор присвоения, создан вектор, туда записан рост студентов )
bmi <- weight/height^2
(рассчитан body mass index для каждого студента)
bmi
[1] 19.59184 22.22222 20.93664 24.93075 31.37799 19.73630
(посмотреть результат вычислений)
xbar <- sum(weight)/length(weight)
xbar
[1] 74.33333
(рассчитан и выведен средний вес студентов, по классическим формулам)
SD <- sqrt(sum((weight - xbar)^2) / (length(weight) - 1))
SD
[1] 15.42293
(рассчитано и выведено среднеквадратичное отклонение, по классическим формулам)
mean(weight)
[1] 74.33333
(А это средний вес студентов, по встроенной функции)
sd(weight)
[1] 15.42293
(А это среднеквадратичное отклонение, по встроенной функции)
ls()
[1] "analyzed_data" "bmi"
"fit"
"height"
[6] "profit"
"SD"
"weight"
"x"
[11] "y"
"year"
(Способ посмотреть все созданные переменные и объекты)
"my_data"
"xbar"
c(42,57,12,39,1,3,4)
[1] 42 57 12 39 1 3 4
(Функция Соединения (concatenate), результат выводится на экран)
В данном случае соединяются числа.
Эта функция может применяться к объектам разного типа, посмотрим пример.
x <- c(1, 2, 3)
x
[1] 1 2 3
(создан вектор х )
y <- c(10, 20)
(создан вектор у )
c(x, y)
[1] 1 2 3 10 20
(соединение двух векторов, получился вектор числового типа)
c("abc", 10, 20)
[1] "abc" "10" "20"
(соединение, получился вектор текстового типа, поскольку был текстовый элемент)
13
seq(from = 4, to = 10)
[1] 4 5 6 7 8 9 10
(Арифметическая прогрессия с шагом 1)
4:10
[1] 4 5 6 7 8 9 10
(Этот же результат с использованием оператора двоеточия, аналог MATLAB)
seq(from = 4, to = 10, by = 2)
[1] 4 6 8 10
(Арифметическая прогрессия с шагом 2)
4:10:2
[1] 4 3 2
Warning message:
In 4:10:2 : numerical expression has 7 elements: only the first used
(Этот же результат с использованием оператора двоеточия, не может быть получен,
для двоеточия шаг всегда равен 1)
4:2:10
[1] 4 5 6 7 8 9 10
Warning message:
In 4:2:10 : numerical expression has 3 elements: only the first used
(Та же ошибка, так как использованием оператора двоеточия, шаг всегда равен 1)
z <- c(2, 4, 6)
(создан вектор z )
rep(z, 2)
[1] 2 4 6 2 4 6
(функция повтора (repeat), помогает создавать массивы при планировании)
rep(z, 1:3)
[1] 2 4 4 6 6 6
(первый элемент повторяется один раз, второй – два, третий - три)
rep(1:2, c(3, 6))
[1] 1 1 1 2 2 2 2 2 2
(первый элемент повторяется три раза, второй – шесть)
rep(1:2, each = 10)
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
(каждый элемент повторяется 10 раз)
h <- matrix(1:12, nrow=3,byrow=TRUE)
h
[,1] [,2] [,3] [,4]
[1,]
1
2
3
4
[2,]
5
6
7
8
[3,]
9
10
11
12
(создание матрицы по строкам, туда записана арифметическая последовательность )
rownames(h) <- c("A", "B", "C")
(присвоить имена строкам матрицы, обычно это имена измеренных объектов )
colnames(h) <- c("V1", "V2", "V3", "V4")
h
V1 V2 V3 V4
A 1 2 3 4
B 5 6 7 8
C 9 10 11 12
(присвоить имена столбцам матрицы, обычно это имена переменных)
t(h)
A B C
V1 1 5 9
V2 2 6 10
14
V3 3 7 11
V4 4 8 12
(транспонировать матрицу)
cbind(A = 1:4, B = 5:8, C = 9:12)
A B C
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
(Так можно получить матрицу путем соединения столбцов (column))
rbind(A = 1:4, B = 5:8, C = 9:12)
[,1] [,2] [,3] [,4]
A
1
2
3
4
B
5
6
7
8
C
9
10
11
12
(Так можно получить матрицу путем соединения строк (row))
sex <- c("male", "male", "female", "female", "female")
(Некоторые переменные, характеризующие объект исследования, могут быть не числами)
Они называются факторами. Например, пол студента.
В этом векторе он записан как текст (мы видим кавычки).
sex <- factor(sex)
Для математической обработки, значения таких переменных должны быть факторизованы.
Для этого – функция factor(). «Уровнями» фактора называются его значения
sex
[1] male
male
female female female
Levels: female male
Мы видим, что из записи на экране исчезли кавычки.
В векторе теперь стоят числа, которые ссылаются на Справочник Значений Фактора
levels(sex)
[1] "female" "male"
(Распечатаем Справочник Значений Фактора)
as.numeric(sex)
[1] 2 2 1 1 1
(Увидим, что в векторе на самом деле стоят числа)
sex <- c(0, 0, 1, 1, 1)
sex <- factor(sex)
sex
[1] 0 0 1 1 1
Levels: 0 1
(Факторизовать можно не только текстовые, но и логические данные)
На самом деле, факторизовать можно вообще любые данные
Для объединения разнородных объектов используется объект типа «список» (list)
Пример:
sex <- c("male", "male", "female")
weight <- c(80, 85, 60)
height <- c(1.75, 1.80, 1.68)
data <- list(Sex = sex, Weight = weight, Height = height)
(Сформировать объект data типа list)
data
$Sex
[1] "male"
"male"
"female"
$Weight
[1] 80 85 60
$Height
15
[1] 1.75 1.80 1.68
data$Sex
[1] "male"
"male"
"female"
(К отдельным компонентам объекта типа list можно обратиться, добавив доллар)
Это мы посмотрели компоненту «Пол»
data$Weight
[1] 80 85 60
(Это мы посмотрели компоненту «Вес»)
!!Важнейший тип объекта для статистики – это таблица измерений
data <- data.frame( Sex = sex, Weight = weight, Height = height)
data
Sex Weight Height
1
male
80
1.75
2
male
85
1.80
3 female
60
1.68
(Таблица формируется при помощи функции data.frame)
names(data)
[1] "Sex"
"Weight" "Height"
(так можно увидеть заголовки столбцов в таблицы, названия переменных)
data$Sex
[1] male
male
female
Levels: female male
(так можно обратиться к отдельному столбцу, например, увидеть столбец «Пол» )
Мы видим, что факторизация произошла в момент формирования таблицы
То есть, во всей матрице – только числа.
data$Height
[1] 1.75 1.80 1.68
(так можно обратиться к столбцу «Рост» )
weight[2]
[1] 85
(так можно обратиться к конкретному значению в конкретном столбце «Вес» )
height[c(1, 3)]
[1] 1.75 1.68
(Выводим рост первого и третьего студента )
i <- c(2, 3)
weight[i]
[1] 85 60
(Выводим рост второго и третьего студента, альтернативный способ )
height[-i]
[1] 1.75
(Выводим рост всех студентов, кроме второго и третьего)
height[height < 1.80]
[1] 1.75 1.68
(Выводим рост всех невысоких студентов с использованием логической индексации)
weight[weight>=80 & weight<=85]
[1] 80 85
(Отбор студентов по весу с использованием логической индексации)
data[2, 3]
[1] 1.8
(альтернативный способ обратиться к конкретной ячейке в таблице данных)
data[2, ]
Sex Weight Height
2 male
85
1.8
16
(альтернативный способ обратиться к конкретной строчке в таблице данных)
data[, 3]
[1] 1.75 1.80 1.68
(альтернативный способ обратиться к конкретному столбцу в таблице данных)
data[data$Sex == "male", ]
Sex Weight Height
1 male
80
1.75
2 male
85
1.80
(отбор строчек по половому признаку с использованием логической индексации)
data$Sex == "male"
[1] TRUE TRUE FALSE
(просмотр логического индексаца)
data[, c(1, 3)]
Sex Height
1
male
1.75
2
male
1.80
3 female
1.68
(альтернативный отбор первого и третьего столбца)
head(data, n = 2)
Sex Weight Height
1 male
80
1.75
2 male
85
1.80
(функция head позволяет увидеть начало таблицы, заданное число строк)
tail(data, n = 2)
Sex Weight Height
2
male
85
1.80
3 female
60
1.68
(функция tail позволяет увидеть конец таблицы, заданное число строк)
Подготовка к заданию «Карта»
Скачайте с сайта http://biogeo.ucdavis.edu файл TKM_adm1.rds – это карта
Туркмении с административным дроблением уровня 1 в формате *.rds
Это формат для R SpatialPolygonsDataFrame. Поместите файл в рабочую
директорию R.
В ходе работы нам потребуется библиотека sp.
Загрузите эту библиотеку:
library(sp)
Загрузим скачанную карту в R,
например, Regions:
и дадим созданному объекту имя,
Regions <-readRDS("TKM_adm1.rds")
ДЛЯ
ПОНИМАНИЯ
РЕЗУЛЬТАТОВ
НЕСКОЛЬКО (НЕОБЯЗАТЕЛЬНЫХ) КОМАНД:
СКАЧИВАНИЯ
ВЫПОЛНИМ
1) Посмотрим структуру созданного объекта:
str(Regions)
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
17
..@ data
:'data.frame':
6 obs. of 10 variables:
.. ..$ OBJECTID : num [1:6] 1 2 3 4 5 6
.. ..$ ID_0 : num [1:6] 236 236 236 236 236 236
.. ..$ ISO
: chr [1:6] "TKM" "TKM" "TKM" "TKM" ...
.. ..$ NAME_0
: chr [1:6] "Turkmenistan" "Turkmenistan" "Turkmenistan"
"Turkmenistan" ...
.. ..$ ID_1 : num [1:6] 1 2 3 4 5 6
.. ..$ NAME_1
: chr [1:6] "Asgabat""| __truncated__ "Ahal" "Balkan"
"Chardzhou" ...
.. ..$ TYPE_1 : chr [1:6] "Ashkhabad" "Welayat|Velayat" "Welayat|Velayat"
"Welayat|Velayat" ...
.. ..$ ENGTYPE_1: chr [1:6] "Independent city" "Province" "Province"
"Province" ...
.. ..$ NL_NAME_1: logi [1:6] NA NA NA NA NA NA
.. ..$ VARNAME_1: chr [1:6] "Ashgabat" "Akhal|Ashkhabad|Ashkhabadskaya
Oblast" "Krasnovodsk, Krasnovodskaya Oblast" "Lebap|Chardzhouskaya Oblast" ...
..@ polygons :List of 6
.. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. .. .. ..@ Polygons :List of 1
.. .. .. .. .
Мы видим, что объект имеет довольно сложную структуру. На верхнем
уровне декомпозиции мы видим, что созданный объект - это list (список),
содержащий два объекта: data и polygons. При этом data имеет тип data.frame
(таблица данных), а polygons имеет тип list (список).
Посмотрим отдельно структуру таблицы данных data :
str(Regions@data)
'data.frame':6 obs. of 10 variables:
$ OBJECTID : num 1 2 3 4 5 6
$ ID_0 : num 236 236 236 236 236 236
$ ISO
: chr "TKM" "TKM" "TKM" "TKM" ...
$ NAME_0
: chr
"Turkmenistan" "Turkmenistan" "Turkmenistan"
"Turkmenistan" ...
$ ID_1 : num 1 2 3 4 5 6
$ NAME_1 : chr "Asgabat""| __truncated__ "Ahal" "Balkan" "Chardzhou" ...
$ TYPE_1
: chr
"Ashkhabad" "Welayat|Velayat" "Welayat|Velayat"
"Welayat|Velayat" ...
$ ENGTYPE_1: chr "Independent city" "Province" "Province" "Province" ...
$ NL_NAME_1: logi NA NA NA NA NA NA
$ VARNAME_1: chr "Ashgabat" "Akhal|Ashkhabad|Ashkhabadskaya Oblast"
"Krasnovodsk, Krasnovodskaya Oblast" "Lebap|Chardzhouskaya Oblast" ...
На экране отобразилась структура таблицы. В ней 6 строчек и 10 столбцов.
Столбцы соответствуют международной информации об географических
административных объектах. В частности в шестом столбце (под названием
Name_1) содержится название этой административной единицы первого уровня
дробления. На экране высвечивается несколько элементов из каждого столбика.
Чтобы посмотреть названия областей, наберем:
18
Regions@data$NAME_1
[1] "Aşgabat" "Ahal"
"Balkan" "Chardzhou" "Mary"
"Tashauz"
В данном случае видно, что это столбик текстового типа. Для
использования в программах обработки статистических данных, необходимо
превратит текст в факторы. Выполним факторизацию:
Regions@data$NAME_1 <- as.factor(Regions@data$NAME_1)
Regions@data$NAME_1
[1] Aşgabat Ahal
Balkan Chardzhou Mary
Tashauz
Levels: Ahal Aşgabat Balkan Chardzhou Mary Tashau
Теперь это столбик с факторами. Всегда остается возможность вернуться
обратно в текст, при помощи функции as.character().
Если мы провели факторизацию, то можно уже делать визуализацию по
областям. Для этого достаточно набрать spplot(Regions , "NAME_1")
Но лучше сделать картинку более красивой.
Во-первых, переведем названия областей. Длинную команду можно
набирать на двух строках, при этом вторая автоматически начнется со знака +.
Regions@data$NAME_1 <as.factor(c("Ашхабад","Ахал","Балкан","Чарджоу","Мары","Ташауз"))
Проверим, что получилось:
Regions@data$NAME_1
[1] Ашхабад Ахал Балкан Чарджоу Мары Ташауз
Levels: Ахал Ашхабад Балкан Мары Ташауз Чарджоу
Видно, что произошло успешное переименование.
Во-вторых, изменим цвета на более приятные для глаза. Хорошие цвета
можно сгенерировать при помощи функции terrain.colors(n), которая генерирует
n штук кодов 32-битного цвета, который обычно используется для обозначения
высоты от уровня моря (от темно-зеленого до коричневого). Попробуем набрать:
terrain.colors(4)
[1] "#00A600FF" "#E6E600FF" "#ECB176FF" "#F2F2F2FF"
Получился вектор из четырех цветов, потому что в качестве аргумента
функции мы указали число 4.
У нас несколько областей. Надо программно определить их количество,
чтобы подставить в качестве аргумента для функции terrain.colors().
Для этого можно было бы использовать функцию dim():
dim(Regions@data)
[1] 6 10
Эта
функция
определяет
размерность
таблицы,
то
есть
dim(Regions@data)[1] – это и есть наше искомое число 6, означающее 6 строчек
в таблице.
19
Но не во всех случаях это справедливо. Если предположить, что область
состоит из двух полигонов (двух несвязанных кусочков), то в таблице под нее
отведут две строки.
В этом случае правильнее использовать команду:
length(levels(Regions@data$NAME_1))
[1] 6
В этой команде мы смотрим число записей в таблице значений факторов.
Таким образом, красивая карта получится, если набрать:
spplot(Regions , "NAME_1", col.regions = terrain.colors(dim(Regions@data)[1]),
scales = list(draw = T))
Попробуйте поменять цвета, использовав вместо terrain.colors() функции:
rainbow(), heat.colors(), topo.colors() и cm.colors(). Посмотрите HELP по этим
функциям.
Попробуйте указать цвет в явном виде, указав в качестве параметра:
col.regions = c("#0000FF","RED","darkgreen",1,rgb(0,1,0), hsv(0,0,1) )
Здесь представлены разные способы указания цвета.
Итоговое задание (8 баллов)
Подготовьте карту страны в соответствии с индивидуальным вариантом.
20
Индивидуальные варианты
N
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Аббревиатура
ISL
GBR
ISR
AND
ARM
AUS
BHR
BGD
BEL
BOL
BIH
CMR
DNK
ERI
FIN
GRC
LVA
Страна
Исландия
Великобритания
Израиль
Андорра
Армения
Австралия
Бахрейн
Бангла-Деш
Бельгия
Боливия
Босния и Герцоговина
Камерун
Дания
Эритрея
Финляндия
Греция
Латвия
Приложение 1. Критерии оценки задания
Баллы
+2 б
+2 б
+2 б
+2 б
Функциональность работы
Есть протокол выполнения подготовительных упражнений
Выведена карта, факторизованы названия областей
Правильно выбраны цвета
Переведены хотя бы некоторые названия
21
Приложение 2. Перевод терминов
Термин
V1, V2, …
obs.
Residuals
deviation
Intercept
Levels
Перевод
Variables (переменные), то есть столбец в таблице с
фактическими (экспериментальными) данными
Observation (наблюдение, эксперимент), то есть строка в
таблице с фактическими (экспериментальными) данными
Разница между моделью и экспериментальными данными
отклонение
Пересечение (с осью y), то есть свободный член в уравнении
регрессии
Значения фактора
Приложение 3. Демонстрация алгоритмов расчета
качества модели из третьего упражнения
Результаты, полученные по команде summary(analyzed_data), могут быть
воспроизведены в EXCEL по следующим формулам.
intersept
coeff
Номер измерения
Возраст
1
2
30
31
113.9499
0.5747
Систолическое давление
Формула для строки 5
fitted()
=C$1+C$2*B5
144
136.3632
220
140.9608
39
47
69
59
175
140
=МИН(E5:E35) или
=МЕДИАНА(E5:E35) или
=МЕДИАНА(E5:E35) или
153.6042
147.8572
=КВАРТИЛЬ(E5:E35;0)
=КВАРТИЛЬ(E5:E35;1)
=КВАРТИЛЬ(E5:E35;2)
=КВАРТИЛЬ(E5:E35;3)
=КВАРТИЛЬ(E5:E35;4)
22
resid()
=C5-D5
7.6368
79.0392
21.3958
-7.8572
-79.3512
-8.65055
-0.6849
7.75185
79.0392
Download