Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Mastitsky_and_Shitikov_2014.pdf
Скачиваний:
177
Добавлен:
25.12.2019
Размер:
10.99 Mб
Скачать

Как эквивалент всем нажатиям кнопок менюR Commander, в окне скриптов появляются инструкции языка R. В нашем случае они имеют следующий вид:

Моллюски <- read.table("http://figshare.com/media/download/98923/97987",

header=TRUE, sep="\t", na.strings="NA", dec=".", strip.white=TRUE) cor.test(Моллюски$CAnumber, Моллюски$ZMlength,

alternative="two.sided", method="pearson") scatterplot(CAnumber ~ ZMlength | Lake, reg.line=lm, smooth=TRUE, spread=TRUE, boxplots='xy', span=0.5, ylab="Численность инфузорий", xlab="Длина раковины", by.groups=FALSE, data=Моллюски)

Сам скрипт или выводимые результаты (а также и то, и другое вместе) можно сохранить в файлах и в любой момент повторить. Тот же самый результат можно получить без запуска R Commander, загрузив сохраненный файл через консоль R.

По большому счету, не зная конструкций языка R (или просто не желая отягощать свою память их запоминанием), с использованием Rcmdr можно выполнить обработку данных с использованием почти всех базовых статистических . Здметодовсь представлены параметрические и непараметрические тесты, методы подгонки различных непрерывных и дискретных распределений, анализ многомерных таблиц сопряженности, одномерный и многомерный дисперсионный анализ, метод главных компонент и кластеризация, различные формы обобщенных регрессионных моделей и . дрДостоин тщательного изучения развитый аппарат анализа и тестирования полученных моделей. Детальное описание техники работы сR Commander, а также особенности реализации алгоритмов обработки данных, можно найти в руководствах(Larson-Hall, 2009; Karp, 2014).

Тем не менее, как язык жестов не может заменить человеческого общения на естественном языке, так и знание языка R существенно расширяет границы возможностей пользователя и делает общение со средойR приятным и захватывающим. И тут автоматическая генерация скриптов Rв Commander может оказаться для читателя прекрасным средством для знакомства с операторами языкаR и обучения специфике вызова отдельных функций. Последующие главы руководства мы посвятим обсуждению процедур обработки данных только на уровне языковых конструкций.

1.4.Объекты, пакеты, функции, устройства

Язык R принадлежит к семейству так называемых высокоуровневых объектноориентированных языков программирования. Для неспециалиста строгое определение понятия "объект" является достаточно абстрактным. Однако для простоты можно называть объектами все, что было создано в процессе работы с R.

Выделяют два основных типа объектов:

1.Объекты, предназначенные для хранения данных("data objects") – это отдельные переменные, векторы, матрицы и массивы, списки, факторы, таблицы данных;

2.Функции ("function objects") – это поименованные программы, предназначенные для создания новых объектов или выполнения определенных действий над ними.

Объекты

среды R, предназначенные

для

коллективного

и

свободного

использования, комплектуются в пакеты, объединяемые сходной тематикой или методами

обработки данных.

Есть некоторое отличие

между

терминамипакет ("package")

и

библиотека ("library"). Термин "library" определяет директорию, которая может содержать один или несколько пакетов. Термин "package" обозначает совокупность функций, HTMLстраниц руководств и примеров объектов данных, предназначенных для тестирования или обучения.

17

Пакеты инсталлируются в определенной директории операционной системы или, в неустановленном виде, могут храниться и распространяться в архивных*.zip файлах Windows (версия пакета должна корреспондироваться с конкретной версией вашейR). Полная информация о пакете(версия, основное тематическое направление, авторы, даты изменений, лицензии, другие функционально связанные пакеты, полный список функций с указанием на их назначение .) и можетпроч быть получена командой library(help=<имя_пакета>), например:

library(help=Matrix)

Все пакеты R относятся к одной из трех категорий: базовые ("base"), рекомендуемые ("recommended") и прочие, установленные пользователем. Получить их список на конкретном компьютере можно, подав команду library() или:

installed.packages(priority = "base") installed.packages(priority = "recommended")

#Получение полного списка пакетов packlist <- rownames(installed.packages())

#Вывод информации в буфер обмена в формате для Excel write.table(packlist,"clipboard",sep="\t", col.names=NA)

Базовые и рекомендуемые пакеты обычно включаются в инсталляционный файлR. Разумеется, нет необходимости сразу устанавливать"про запас" много разных пакетов. Для установки пакета достаточно в командном окнеR Console выбрать пункт меню "Пакеты > Установить пакет(ы)" или ввести, например, команду:

install.packages(c("vegan", "xlsReadWrite", "car"))

Пакеты можно скачивать, например, с русского "зеркала" http://cran.gis-lab.info, для чего удобно воспользоваться редакцией файла Rprofile.site как показано в разделе 1.1.

Другой вариант установки пакетов – зайти на сайт http://cran.gis-lab.info/web/packages, выбрать нужный пакет в виде zip-файла и скачать в выбранную папку своего компьютера.

В этом случае можно предварительно

посмотреть всю информацию по, впакету

частности, описание входящих в него

функций,

определиться, насколько он вам

необходим. Далее нужно выполнить пункт командного меню"Пакеты > Установить пакеты из локальных zip-файлов".

При запуске консолиRGui загружаются только некоторые базовые пакеты. Для инициализации любого другого пакета перед непосредственным использованием его функций нужно ввести команду library (<имя_пакета>).

Установить, какие пакеты загружены в каждый момент проводимой сессии, можно, подав команду:

sessionInfo()

R version 2.13.2 (2011-09-30)

Platform: i386-pc-mingw32/i386 (32-bit)

attached base packages:

[1] stats graphics grDevices utils datasets methods base

other attached packages:

[1] vegan_2.0-2 permute_0.6-3

loaded via a namespace (and not attached):

[1] grid_2.13.2 lattice_0.19-33 tools_2.13.2

18

Приведем в следующей таблице список(возможно, не исчерпывающе полный) пакетов, которые использовались в скриптах, представленных настоящей книгой:

Пакеты R

Назначение

 

"Базовые" пакеты

base

Базовые конструкции R

compiler

Компилятор пакетов R

datasets

Набор таблиц с данными для тестирования и демонстрации функций

graphics

Базовые графические функции

grDevices

Драйверы графических устройств, палитры цветов, шрифты

grid

Функции создания графических слоев

methods

Компоненты объектно-ориентированного программирования (классы,

методы)

splines

Функции работы с регрессионными сплайнами разного типа

stats

Базовые функции статистического анализа

stats4

Методы статистических функций класса S4

tcltk

Компоненты интерфейса с пользователем (меню, боксы выбора и проч.)

tools

Информационная поддержка, администрирование и документирование

utils

Различные утилиты отладки, ввода-вывода, архивирования и проч.

 

"Рекомендуемые" пакеты

boot

Функции различных процедур бутстрепа и "складного ножа"

class

Различные алгоритмы неиерархической классификации и распознавания

cluster

Алгоритмы разделения и иерархической кластеризации

codetools

Анализ и проверка кодов R

foreign

Чтение и запись файлов в разных форматах (DBF, SPSS, DTA, Stata)

KernSmooth

Функции, обслуживающие оптимизацию ядерного сглаживания

lattice

Графические функции расширенной функциональности (Sarkar, 2008)

MASS

Набор данных и статистических функций (Venables, Ripley, 2002)

Matrix

Операции с матрицами и векторами

mgcv

Обобщенные аддитивные модели и модели со смешанными эффектами

nlme

Линейные и нелинейные модели со смешанными эффектами

nnet

Нейронные сети прямого распространения

rpart

Построение деревьев классификации и регрессии

spatial

Функции кригинга и анализа пространственного распределения точек

survival

Анализ выживаемости (модель Кокса и др.)

 

Пакеты, установленные в процессе работы

adegenet

Алгоритмы анализа генетических расстояний

arm

Анализ моделей регрессии – приложение к книге (Gelman, Hill, 2007)

car

Процедуры, связанные с прикладным регрессионным анализом

corrplot

Отображение корреляционных матриц в графическом виде

fitdistrplus

Подбор параметров статистических распределений

FWDselect,

Селекция набора информативных переменных в регрессионных моделях

packfor

 

gamair

Наборы данных для тестирования аддитивных моделей

geosphere

Оценка географических расстояний

ggplot2

Усовершенствованный графический пакет высокой функциональности

DAAG

Функции анализа данных и графики к книге (Maindonald, Braun, 2010)

Hmisc

Набор функций Харрела (Harrell)

HSAUR2

Приложение к книге (Everitt, Hothorn, 2010)

ISwR

Первичный статистический анализ в R

jpeg

Работа с графическими файлами jpeg

lars

Специальные виды регрессии (LARS, Lasso и др.)

lavaan

Конфирматорный анализ и модели структурных уравнений

lmodel2

Реализация моделей регрессии I и II типов (MA, SMA, RMA)

19

maptools

Инструментарий работы с географическими картами

mice

Процедуры анализа и заполнения пропущенных значений

moments

Функции расчета выборочных моментов

nortest

Критерии при проверке гипотезы о нормальном распределении

outliers

Анализ выбросов в данных

pastecs

Анализ пространственных и временных рядов в экологии

pls

Регрессия на главные компоненты

pwr

Оценка статистической мощности гипотез

reshape

Гибкое преобразование таблиц данных

robustbase

Робастные методы построения регрессионных моделей

rootSolve

Нахождение корней функции с несколькими переменными

scales

Подбор цветовых шкал

sem

Модели структурных уравнений

semPlot

Визуализация структурных связей

sm

Оценка плотности распределений и методы сглаживания

sp

Классы и методы доступа к пространственным данным

spatstat

Методы пространственной статистики, подбор моделей

spdep

Пространственные зависимости: геостатистические методы и моделирование

stargazer

Вывод информации о статистических моделях в разных форматах

vcd

Визуализация категориальных данных

vegan

Выполнение расчетов по экологии сообществ (меры сходства, разнообразия и

вложенности, ординация и многомерный анализ)

Если мы попробуем загрузить пакет, еще не установленный вR, или попытаемся использовать функции еще незагруженного пакета, то получим сообщения системы:

sem(model, data=PoliticalDemocracy)

Ошибка: не могу найти функцию "sem" library(lavaan)

Ошибка в library(lavaan) : нет пакета под названием 'lavaan'

Следующая функция, представленная K. Cichini, принимает в качестве исходного параметра список используемых пользователем пакетов и сама разбирается, какие следует загрузить, а какие нужно предварительно установить. Для понимания работы скрипта необходимо знание конструкций языкаR, описываемых в следующем разделе, но интересующийся читатель может вернуться к приведенным командам позднее.

instant_pkgs <- function(pkgs) {

pkgs_miss <- pkgs[which(!pkgs %in% installed.packages()[, 1])]

#Инсталлируем пакеты, не подготовленные к загрузке: if (length(pkgs_miss) > 0) {

install.packages(pkgs_miss)

}

#Загружаем пакеты, которые еще не загружены: attached <- search()

attached_pkgs <- attached[grepl("package", attached)] need_to_attach <- pkgs[which(!pkgs %in% gsub("package:",

"", attached_pkgs))] if (length(need_to_attach) > 0) {

for (i in 1:length(need_to_attach)) require(need_to_attach[i], character.only = TRUE)

}

}

# Пример вызова:

instant_pkgs(c("base", "jpeg", "vegan"))

20

Получить список функций каждого пакета можно, например, подав команду:

ls(pos = "package:vegan")

Примечание: ls() является функцией общего назначения для вывода списка объектов в заданной среде (environment). Команда выше устанавливает в качестве такой среды пакет vegan. Если подать эту команду без параметров, то получим список объектов, созданных за время текущей сессии.

Получить список аргументов входящих параметров любой функции загруженного пакета можно, подав команду args(). Например, при запуске широко используемой нами впоследствии функции получения линейной модели lm() задают параметры:

args(lm)

function (formula, data, subset, weights, na.action,

method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, contrasts = NULL, offset, ...)

Если ввести команду, состоящую только из аббревиатуры функции(например, вычисляющей межквартильный размах IQR), то можно получить исходный текст функции в кодах языка R:

IQR

function (x, na.rm = FALSE)

diff(quantile(as.numeric(x), c(0.25, 0.75), na.rm = na.rm, names = FALSE))

Продвинутый пользователь может внести изменения в этот код и"перенаправить" вызов стандартной функции на свою версию.

Однако если мы захотим таким же образом посмотреть код функцииpredict(), которая используется для расчета прогнозируемых значений линейной ,моделито получим:

predict

function (object, ...) UseMethod("predict")

В данном случаеpredict() представляет собой"универсальную" функцию: в зависимости от того, объект какой модели подается на ее вход (lm для линейной регрессии, glm для пуассоновской или логистической регрессии, lme для модели со смешанными эффектами и т.),.д актуализируется соответствующий метод получения прогнозируемых значений. В частности, эта функция используется для реализации следующих методов:

methods("predict")

predict.Arima*

[1] predict.ar*

[3] predict.arima0*

predict.glm

[5] predict.HoltWinters*

predict.lm

[7] predict.loess*

predict.mlm

[9] predict.nls*

predict.poly

[11] predict.ppr*

predict.prcomp*

[13] predict.princomp*

predict.smooth.spline*

[15] predict.smooth.spline.fit* predict.StructTS* Non-visible functions are asterisked

21

Этот пример связан с идеями объектно-ориентированного программирования (ООП), лежащими в основе среды R. Для ООП в стиле S3 метод – это, собственно говоря, функция, которая вызывается другой универсальной (generic) функцией, такой, например,

как print(), plot() или summary(), в зависимости от класса объекта, подаваемого на ее вход. При этом за "объектную ориентированность" отвечает атрибут class, который

обеспечивает корректную диспетчеризацию и вызов необходимого метода для данного объекта. Так "функция-метод" для получения прогнозируемых значений обобщенной линейной модели будет иметь вызовpredict.glm(), при сглаживании сплайнами– predict.smooth.spline()и т.д. Подробную информацию о модели ООПS3 можно получить в разделе справкиS3Methods, а по более продвинутой модели S4 – в разделе

Methods.

Наконец, рассмотрим некоторые простейшие приемы сохранения результатов работы, полученных во время сессии R:

°sink(file= <имя файла>) – выводит результаты выполнения последующих

команд в режиме реального времени в файл с заданным именем; для прекращения действия этой команды необходимо выполнить команду sink() без параметров;

°save(file= <имя файла>, <список сохраняемых объектов>) – сохраняет указанные объекты в двоичном файлеXDR-формата, с которым можно работать в любой операционной системе;

°load(file= <имя файла>) – восстанавливает сохраненные объекты в текущей

среде;

°save.image(file= <имя файла>) – сохраняет все объекты, созданные в ходе работы, в виде специфичного для R rda-файла.

Пример передачи сформированной таблицы с данными в буфер обмена в формате, совместимом со структурой листа Excel, был приведен выше в настоящем разделе. В главе 6 будет приведен пример передачи данных из объекта линейной модели в файл Word.

Среда R может генерировать пиксельное изображение необходимого качества почти для любого разрешения дисплея или устройства ,печатитакже сохранить полученные графические окна в файлах разного формата. Для каждого устройства графического вывода существует функция драйвера: для получения полного списка драйверов можно ввести командуhelp(Devices). Среди графических устройств наиболее употребительными являются:

°windows()– графическое окно Windows (экран, принтер или метафайл).

°png(), jpeg(), bmp(), tiff()– вывод в растровый файл соответствующего формата;

°pdf(),postscript() – вывод графической информации в файлPDF или

PostScript.

По завершению работы с устройством вывода следует отключить его драйвер

командой dev.off(). Существует возможность активизации нескольких устройств графического вывода одновременно и переключения между : нимисм., например, соответствующий раздел в книге Шипунова с соавт. (2012, с. 278).

22