Базовые операции в R

Серия материалов “Базовые операции в R” призвана для того, чтобы ближе познакомить читателя с программной средой R и закрыть белые пятна между статьями, вышедшими в свет ранее на нашем сайте. Мы также рекомендуем читателю ознакомиться с публикацией Статистика с большой буквы или R, чтобы узнать об истории развития этого языка и общих принципах работы с ним.

Работая с примерами этого цикла публикаций, Вы сможете самостоятельно, начиная с азов, освоить R и постепенно научиться выполнять вычисления простой и средней сложности. Кроме того, изучив все материалы этой серии, для Вас не составит труда применить и более сложные методики анализа, описанные на нашем сайте. Мы также рекомендуем настоящий цикл материалов как отправную точку для участников наших on-line курсов шести сигм, отдавшим предпочтение R в качестве среды анализа в своих проектах.

Итак, в первой статье мы познакомимся со способами расчета некоторых показателей, объединенных под общим понятием описательных или базовых статистик. Сюда принято относить среднее значение (среднее арифметическое, медиана, мода), минимальное и максимальное значения, разброс, вариацию и стандартное отклонение, квартили и процентили…

В качестве набора результатов наблюдений создадим ряд значений, подчиняющихся нормальному закону распределения, состоящий из 100 наблюдений со средним арифметическим 50 и стандартным отклонением 5. Рабочий файл прикреплен к статье и доступен всем зарегистрированным пользователям. Вы всегда можете сгенерировать подобные значения самостоятельно, применив команду:

> x<-rnorm(100, 50, 5)

Чтобы сохранить эти значения введите еще одну команду:

> write.csv(x, file="data.csv")

Теперь сгенерированный набор значений находится в папке Мои документы в файле data.csv. Его можно в любой момент вызвать, введя команду:

> read.csv(file="data.csv", header=TRUE, sep=",", dec=".")

или присвоить значения какой-либо переменной:

> x<-read.csv(file="data.csv", header=TRUE, sep=",", dec=".")

Теперь рассчитаем среднее арифметическое значение:

> mean(x)
[1] 50.33122

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

> sum(x)/100
[1] 50.33122

Чтобы рассчитать медиану введите команду:

> median(x)
[1] 50.56743

А вот для моды стандартной команды в R не предусмотрено, поэтому используйте следующее выражение:

> density(x)$x[which.max(density(x)$y)]
[1] 50.8236

Минимальное и максимальное значения можно рассчитать, используя следующие команды, соответственно:

> min(x)
[1] 39.44106
> max(x)
[1] 65.11346

Стандартная команда range, отражает диапазон значений в формате “от-до” (от минимального значения до максимального):

> range(x)
[1] 39.44106 65.11346

Для того, чтобы действительно рассчитать разброс, необходимо ввести следующую команду:

> max(x)-min(x)
[1] 25.6724

С помощью следующего выражения можно рассчитать вариацию значений:

> var(x)
[1] 22.76251

Квадратный корень этого значения покажет стандартное (среднеквадратическое) отклонение:

> sqrt(var(x))
[1] 4.771007

Последний показатель можно также рассчитать с помощью специальной функции расчета стандартного отклонения:

> sd(x)
[1] 4.771007

Чтобы рассчитать квартили введите команду:

> quantile(x)
      0%      25%      50%      75%     100%
39.44106 47.04634 50.56743 52.57987 65.11346

Полученные результаты показывают минимальное значение, первый, второй, третий и четвертый квартили.

Чтобы рассчитать какой-либо процентиль (квантиль), воспользуйтесь командой:

> quantile(x, c())

В аргументе вектора “c” следует указать соответствующие доли от единицы. Например, чтобы рассчитать 30, 60 и 90% квантили введите команду:

> quantile(x, c(.30, .60, .90))
     30%      60%      90%
48.52572 51.30114 56.32634

Существую также команды для вызова стандартного набора описательных статистик. Например:

> summary(x)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  39.44   47.05   50.57   50.33   52.58   65.11

или

> fivenum(x)
[1] 39.44106 47.02794 50.56743 52.61602 65.11346

С помощью последней команды получают минимальное значение, первый квартиль, медиану, третий квартиль и максимальное значение.

Все эти команды являются базовыми – встроенными в R. Кроме стандартных команд, существует немало различных пакетов, которые позволяют, как автоматизировать процесс расчёта, так и применить некоторые другие алгоритмы расчета статистических величин.


UPD 05.03.2012: Базовые операции в R. Часть 2

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

Чтобы отразить наблюдения в графическом виде используйте команду:

> plot(x$x)

Конечно же, в таком виде наблюдения мало о чем могут сказать. Гораздо информативнее изображение в виде гистограммы:

> hist(x$x)

или ящичной диаграммы:

> boxplot(x$x)

Теперь рассмотрим способы представления данных в виде категорий с помощью круговых и столбчатых диаграмм. Для этого создадим новый набор значений, соответствующий составу атмосферы:

> data<-c(78, 21, 1)
> names(data)<-c("Азот", "Кислород", "Прочее")
> barplot(data)

> pie(data)

Теперь разберем основные способы настройки диаграмм и попробуем применить их:

  • main – заголовок диаграммы
  • sub – подзаголовок (футер) диаграммы
  • ylab – подпись оси ординат
  • xlab – подпись оси абсцисс

> barplot(data, ylab="%", xlab="Атмосферные газы", main="Состав атмосферы", sub="SixSigmaOnline.ru")

С помощью команды “col”, можно разрисовать диаграмму в любой цвет:

> color=c("red", "blue", "yellow")
> barplot(data, col=color, main="Состав атмосферы", sub="SixSigmaOnline.ru")

или

> pie(data, col=color, main="Состав атмосферы", sub="SixSigmaOnline.ru")

Конечно, это далеко не все команды, которые можно применить для настройки диаграмм, тем не менее, оперируя ими Вы сможете построить достаточно информативную и наглядную диаграмму.


UPD 02.04.2012: Базовые операции в R. Часть 3

В настоящей публикации мы рассмотрим некоторые способы представления числовых рядов в виде простейших графиков, продолжим рассматривать способы настройки диаграмм в R, а также способы изучения взаимосвязи между двумя факторами – корреляцию. В качестве набора наблюдения я использую ряды данных, присвоенные переменным. Каждый ряд представляет координаты отдельных точек: координаты абсцисс присвоены переменной x, а ординат – y.

> x<-c(3.9, 6.5, 3.7, 4.5, 5.0, 5.8, 3.3, 6.2, 3.6, 3.9, 5.1, 6.4, 4.2, 4.9, 6.0, 5.4, 4.4, 3.8, 6.7, 4.6, 4.3, 6.3, 5.2, 6.4, 6.2, 5.5, 2.7, 2.8, 5.4, 5.8, 6.6, 5.3, 4.2, 4.3, 4.0, 5.4)
> y<-c(56, 55, 43, 55, 46, 54, 42, 63, 48, 45, 50, 58, 50, 54, 52, 50, 60, 53, 63, 51, 45, 60, 48, 61, 56, 46, 41, 43, 58, 60, 61, 55, 46, 53, 51, 56)

С помощью следующей команды мы представим результаты наблюдений в виде точек на плоскости декартовых координат:

> plot(x, y)

Обратите внимание на положение переменных в аргументе функции – оно соответствует зависимой (y) и независимой (x) переменной. Если поменять их местами, то диаграмма примет несколько иной вид:

Попробуем видоизменить способ изображения наблюдений с помощью аргумента “type”. Значение аргумента может принимать одно из следующих значений:

  • "p" для точек (значение по умолчанию)
  • "l" для линий
  • "b" для точек и линий (раздельно)
  • "o" для точек и линий
  • "c" для пунктирных линий
  • "h" для вертикальных линий (разновидность гистограмм)

Используем соединительные линии:

> plot(x, y, type="l")

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

> abline(lm(y ~ x))

Функция abline() позволяет добавить на любой график прямую линию. В настоящем примере, мы записали в ее аргументе функцию lm(), указав, таким образом, что прямая линия должна отражать линейную зависимость переменных x и y.

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

> lines(lowess(x, y))

Оба представленных метода помогают графически представить и оценить взаимосвязь между переменными, однако не дают возможности судить о силе этой взаимосвязи. Числовую оценку взаимосвязи – корреляцию, можно рассчитать с помощью функции:

> cor(x,y)
[1] 0.7432663

В аргументе команды следует указать метод расчета корреляции – method и способ выбора наблюдений – use:

> cor(x, use="", method="")

Аргумент method, принимает одно из следующих значений: pearson, spearman или kendall, соответствующих расчету коэффициента корреляции Пирсона, Спирмена или Кендалля, а use – everything, all.obs, complete.obs, na.or.complete или pairwise.complete.obs, соответствующих различному подходу к анализу наблюдений и отсутствую отдельных значений числового ряда. Например:

> cor(x,y, use="complete.obs", method="spearman")
[1] 0.7316308

Таким образом, используя один из методов визуализации взаимосвязи между переменными и расчета корреляционной зависимости, результаты анализа можно представить одной иллюстрацией:

> cor(x,y, method="pearson")
[1] 0.7432663
> plot(x, y, main="x-y correlation", sub="pearson correlation = 0.7432663")
> abline(lm(y ~ x))


UPD 09.04.2012: Базовые операции в R. Часть 4

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

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

> x<-rnorm(100, 0, 1)
> hist(x)

Реже используют ящичные диаграммы:

> boxplot(x)

Альтернативный способ визуализации распределения величины – график плотности вероятности:

> plot(density(x))

С помощью следующей команды на гистограмму можно нанести кривую нормального распределения:

> hist(x)
> xfit<-seq(min(x),max(x),length=100)
> yfit<-(dnorm(xfit,mean=mean(x),sd=sd(x)))*diff(hist(x)$mids[1:2])*length(x)
> lines(xfit, yfit)

Унимодальные распределения, неподверженные асимметрии (в том числе и нормальное), обладают той особенностью, что среднее арифметическое, медиана и мода близки (идеальный вариант – все значения равны между собой). Рассчитав указанные статистики:

> mean(x)
[1] -0.0214007
> median(x)
[1] 0.09739521
> density(x)$x[which.max(density(x)$y)]
[1] 0.2171224,-

можно нанести их на график плотности вероятности или гистограмму. Например:

>hist(x)
>abline(v=mean(x), col="red")
>abline(v=median(x), col="yellow")
>abline(v= density(x)$x[which.max(density(x)$y)], col="green")

Наличие асимметрии можно диагностировать по порядку расположения выбранных статистик:

  • при левосторонней асимметрии – среднее арифметическое – медиана – мода;
  • при правосторонней асимметрии – мода – медиана – среднее арифметическое.

Если значения выстраиваются в какой-либо другой последовательности, возможно, распределение переменной би- или полимодальное.

Для анализа асимметрии по величине скоса (Skewness) необходимо предварительно установить пакет “moments”. С помощью этого пакета мы также сможем проверить эксцесс (Kurtosis) – “остроту пика” распределения. Алгоритм анализа выглядит следующим образом:

> install.packages("moments")
> library("moments")
> skewness(x)
[1] -0.3032459
> kurtosis(x)
[1] 3.188327

Отрицательный показатель скоса (Skewness) свидетельствует о незначительной левосторонней асимметрии, а положительный эксцесс (Kurtosis) – о более островершинной форме кривой функции вероятности распределения. Следует учесть, что равенство средних значений (среднего арифметического, медианы и моды) и отсутствие асимметрии еще не доказывают подчинение распределения величины нормальному закону. Логистическое распределение и распределение Лапласа также удовлетворяют этим условиям. Однако показатель эксцесса для этих распределений будет выше 0 – значения эксцесса нормального распределения.

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

20.02.2012 / 15966 / Загрузок: 0 / DMAgIC /
Всего комментариев: 0
avatar
SixSigmaOnline.ru © 2009-2020            Хостинг от uWeb