ݺߣ

ݺߣShare a Scribd company logo
Тема 4
Сергей Мастицкий
БГУ, Минск, май 2014
4.1. Общий протокол для
выполнения РАД
Zuur et al. (2010) A protocol for data exploration to avoid common
statistical problems. Methods in Ecology & Evolution 1: 3-14
 Линейная регрессия и ANOVA-подобные методы
 Обобщенные линейные модели (GLM)
 Обобщенные аддитивные модели (GAM)
 Деревья принятия решений
 Анализ выживаемости
 Нейронные сети
 Кластерный анализ
 Метод главных компонент (PCA)
 Многомерное шкалирование (MDS)
 Анализ временных рядов, etc.
Author: Sergey Mastitsky
Мусор на входе – мусор на выходе
В частности, исследователи часто игнорируют
математические допущения, лежащие в основе
тех или иных методов
Author: Sergey Mastitsky
 Для всех Xi
 Yi должны быть распределены нормально
 дисперсия Yi должна быть однородной
 Yi должны быть независимы (=отсутствие
временной или пространственной корреляции)
 Отсутствие наблюдений-выборосов
 Остатки должны распределяться нормально
iii XY   10
Author: Sergey Mastitsky
…анализу данных должно
предшествовать тщательное
изучение их свойств
Разведочный анализ данных (Exploratory data
analysis, EDA) может занимать более 50% всего
времени, затрачиваемого на анализ!
Author: Sergey Mastitsky
 1. Формулировка биологической гипотезы.
Выполнение исследования и сбор данных
 2. Изучение свойст данных:
- Выбросы среди Y и X
- Однородность дисперсии Y
- Нормальность распределения Y и X
- Проблемы с нулевыми значениями Y
- Коллинеарность среди предикторов (X)
- Взаимодействия среди предикторов
- Независимость значений Y
 3. Подгонка статистической модели
Author: Sergey Mastitsky
 Выявление выбросов:
http://r-analytics.blogspot.de/2012/05/blog-post_28.html
 Проверка однородности групповых дисперсий:
http://r-analytics.blogspot.de/2012/06/blog-post.html
 Проверка нормальности распределения:
http://r-analytics.blogspot.de/2012/06/blog-post_14.html
 Выявление избыточного количества нулевых значений:
http://r-analytics.blogspot.de/2012/06/blog-post_22.html
 Выявление коллинеарности:
http://r-analytics.blogspot.de/2012/07/blog-post.html
 Выявление взаимодействий между предикторами:
http://r-analytics.blogspot.de/2012/07/blog-post_13.html
 Выявление автокорреляции
http://r-analytics.blogspot.de/2012/07/blog-post_20.html
Author: Sergey Mastitsky
“…нет более мощного статистического
инструмента, чем хорошо подобранный
график” (Chambers et al., 1983)
Всегда начинайте анализ данных с их
визуалиции при помощи графиков, подходящих
ситуации
Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983) Graphical Methods for Data
Analysis. Wadsworth & Brooks/Cole
Author: Sergey Mastitsky
 Встроенные примеры:
> demo(graphics)
 R Graph Gallery:
http://rgraphgallery.blogspot.com/
 ggplot2:
http://docs.ggplot2.org/current/
Author: Sergey Mastitsky
4.2. Основы создания
графиков в R: диаграммы
рассеяния
Подробнее см.:
http://r-analytics.blogspot.de/2011/10/r-plot.html
http://r-analytics.blogspot.de/2011/10/r_18.html
http://r-analytics.blogspot.de/2011/10/r_28.html
> LWdata = read.table(
file = "pH_down_experiment.txt",
header = TRUE,
sep = "t")
> names(LWdata)
> head(LWdata)
> LWdata
Author: Sergey Mastitsky
 Функция общего назначения (generic
function)
 Позволяет выполнять тонкую настройку
внешнего вида графиков => имеет очень
много аргументов
 Мы коснемся только самых азов этой
огромной темы
Author: Sergey Mastitsky
> plot(LWdata$Length, LWdata$Weight)
> # или используя интерфейс формулы:
> plot(LWdata$Weight ~ LWdata$Length)
Author: Sergey Mastitsky
10 15 20 25 30 35
0.00.20.40.60.81.01.2
Length
Weight
attach() делает содержимое таблицы
данных видимым в т.н. поисковом
окружении R => нет необходимости в $
> attach(LWdata)
> plot(Weight ~ Length)
Author: Sergey Mastitsky
> plot(log(Weight) ~ log(Length))
> # Изменям заголовки осей:
> plot(log(Weight) ~ log(Length),
xlab = "log transformed Length",
ylab = "log transformed Weight")
Author: Sergey Mastitsky
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log(Length)
log(Weight)
выброс
> identify(log(Weight) ~ log(Length))
Кликните рядом с
подозрительной точкой,
а затем - ESC…
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log(Length)
log(Weight)
205
> detach(LWdata)
> LWdata <- LWdata[-205, ]
> attach(LWdata)
> # сработало?
> plot(log(Weight) ~ log(Length))
Author: Sergey Mastitsky
> plot(log(Weight) ~ log(Length),
xlab = "log transformed Length",
ylab = "log transformed Weight",
pch = 2)
Упражнение:
Попробуйте другие значения pch …
Author: Sergey Mastitsky
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log transformed Length
logtransformedWeight
> plot(log(Weight) ~ log(Length),
xlab = "log transformed Length",
ylab = "log transformed Weight",
pch = 2, cex = 0.6)
Author: Sergey Mastitsky
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log transformed Length
logtransformedWeight
> plot(log(Weight) ~ log(Length),
xlab = "log transformed Length",
ylab = "log transformed Weight",
pch = 2, cex = 0.6, col = 2)
Также применяется col = "red"
См. colors()
Author: Sergey Mastitsky
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log transformed Length
logtransformedWeight
> plot(log(Weight) ~ log(Length),
xlab = "log transformed Length",
ylab = "log transformed Weight",
pch = 20, col = 2)
Author: Sergey Mastitsky
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log transformed Length
logtransformedWeight
> plot(log(Weight) ~ log(Length),
xlab = "log transformed Length",
ylab = "log transformed Weight",
pch = 20,
col = as.numeric(Treatment))
> # вот как это работает:
> as.numeric(Treatment)
Author: Sergey Mastitsky
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log transformed Length
logtransformedWeight
> plot(log(Weight) ~ log(Length),
xlab = "log transformed Length",
ylab = "log transformed Weight",
pch = 20, col = ifelse(
Treatment == "Control", 1, 2))
условие
да
нет
Author: Sergey Mastitsky
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log transformed Length
logtransformedWeight
> contr <- lm(log(
Weight[Treatment == "Control"]) ~
log(
Length[Treatment == "Control"]))
> other <- lm(log(
Weight[Treatment != "Control"]) ~
log(
Length[Treatment != "Control"]))
Author: Sergey Mastitsky
> abline(contr, lty = 1, lwd = 2)
> abline(other, lty =5, lwd = 2,
col = "blue")
Author: Sergey Mastitsky
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
log transformed Length
logtransformedWeight
> plot(log(Weight) ~ log(Length),
xlab = "log transformed Length",
ylab = "log transformed Weight",
main = "Length/Weight relationship",
pch = 20, col = ifelse(
Treatment == "Control", 1, 2))
> abline(contr, lty = 1, lwd = 2)
> abline(other, lty = 5, lwd = 2,
col = "blue")
Author: Sergey Mastitsky
! Не забудьте:
detach(LWdata)
Author: Sergey Mastitsky
2.5 3.0 3.5
-4-3-2-10
Length/Weight relationship
log transformed Length
logtransformedWeight
4.3. Основы создания
графиков в R: гистограммы
и диаграммы плотности
вероятности
Подробнее см.:
http://r-analytics.blogspot.de/2011/11/r_06.html
 Дают представление о форме
распределения данных
 В R гистограммы строятся очень просто:
> hist(LWdata$Length)
> hist(LWdata$Weight)
Author: Sergey Mastitsky
Histogram of LWdata$Length
LWdata$Length
Frequency
5 10 15 20 25 30 35
010203040
Histogram of LWdata$Weight
LWdata$Weight
Frequency
0.0 0.2 0.4 0.6 0.8 1.0 1.2
020406080100
Author: Sergey Mastitsky
> hist(LWdata$Length, breaks = 50)
Histogram of LWdata$Length
LWdata$Length
Frequency
10 15 20 25 30 35
0246812
Author: Sergey Mastitsky
 Часто лучше гистограмм отображают
свойства данных
 Кривые плотности рассчитываеются при
помощи функции density()
 Эти кривые потом добавляются к графику
при помощи функции lines()
Author: Sergey Mastitsky
# Расчет кривых для каждой группы:
> attach(LWdata)
> trControl = density(Length[Treatment ==
"Control"])
> trA = density(Length[Treatment == "A"])
> trB = density(Length[Treatment == "B"])
> trC = density(Length[Treatment == "C"])
# Построение графика:
> plot(trControl, main =" ",
ylim = c(0, 0.065), lty = 1)
Author: Sergey Mastitsky
# Добавление кривых:
> lines(trA, col = 2)
> lines(trB, col = 3)
> lines(trC, col = 4)
# Добавление легенды:
> legend("topright",
lty = c(1, 1, 1, 1), col = c(1:4),
legend = c("Control", "A", "B", "C"),
bty = "n")
Author: Sergey Mastitsky
Author: Sergey Mastitsky
0 10 20 30 40
0.000.020.040.06
N = 90 Bandwidth = 2.452
Density
Control
A
B
C
4.4. Основы создания
графиков в R: графики
квантилей
 Позволяют проверить нормальность
распределения данных
 Наблюдаемые значени vs. их ожидаемые
квантили => должна получаться
примерно прямая диагональная линия
 В R:
> qqnorm(LWdata$Length)
> qqnorm(LWdata$Weight)
Author: Sergey Mastitsky
Author: Sergey Mastitsky
-3 -2 -1 0 1 2 3
101520253035
Theoretical Quantiles
SampleQuantiles
-3 -2 -1 0 1 2 3
0.00.20.40.60.81.01.2
Theoretical Quantiles
SampleQuantiles
4.5. Основы создания
графиков в R: диаграммы
размахов
Подробнее см.:
http://r-analytics.blogspot.de/2011/11/r_08.html
Медиана
0.75 квантиль (Q3)
0.75 квантиль (Q1)
ИКР
max в пределах
Q3 + 1.5ИКР
“выброс”
Author: Sergey Mastitsky
min в
пределах
Q1 - 1.5ИКР
> boxplot(Weight/Length ~ Treatment)
Author: Sergey Mastitsky
Control A B C
0.0050.0150.0250.035
4.6. Основы создания
графиков в R: столбиковые
диаграммы
Подробнее см.:
http://r-analytics.blogspot.de/2012/01/r_20.html
 Обобщают информацию о качественных
переменных
 Для создания служит функция barplot() (см.
?barlot)
 Часто требуется кросс-табуляция при помощи
xtabs()для подготовки таблицы
сопряженности:
> xtabs(~ Treatment)
Treatment
Control A B C
90 89 90 92
Author: Sergey Mastitsky
> barplot(xtabs(~ Treatment))
Control A B C
020406080
Author: Sergey Mastitsky

More Related Content

Разведочный анализ данных: создание графиков в системе R

  • 2. 4.1. Общий протокол для выполнения РАД Zuur et al. (2010) A protocol for data exploration to avoid common statistical problems. Methods in Ecology & Evolution 1: 3-14
  • 3.  Линейная регрессия и ANOVA-подобные методы  Обобщенные линейные модели (GLM)  Обобщенные аддитивные модели (GAM)  Деревья принятия решений  Анализ выживаемости  Нейронные сети  Кластерный анализ  Метод главных компонент (PCA)  Многомерное шкалирование (MDS)  Анализ временных рядов, etc. Author: Sergey Mastitsky
  • 4. Мусор на входе – мусор на выходе В частности, исследователи часто игнорируют математические допущения, лежащие в основе тех или иных методов Author: Sergey Mastitsky
  • 5.  Для всех Xi  Yi должны быть распределены нормально  дисперсия Yi должна быть однородной  Yi должны быть независимы (=отсутствие временной или пространственной корреляции)  Отсутствие наблюдений-выборосов  Остатки должны распределяться нормально iii XY   10 Author: Sergey Mastitsky
  • 6. …анализу данных должно предшествовать тщательное изучение их свойств Разведочный анализ данных (Exploratory data analysis, EDA) может занимать более 50% всего времени, затрачиваемого на анализ! Author: Sergey Mastitsky
  • 7.  1. Формулировка биологической гипотезы. Выполнение исследования и сбор данных  2. Изучение свойст данных: - Выбросы среди Y и X - Однородность дисперсии Y - Нормальность распределения Y и X - Проблемы с нулевыми значениями Y - Коллинеарность среди предикторов (X) - Взаимодействия среди предикторов - Независимость значений Y  3. Подгонка статистической модели Author: Sergey Mastitsky
  • 8.  Выявление выбросов: http://r-analytics.blogspot.de/2012/05/blog-post_28.html  Проверка однородности групповых дисперсий: http://r-analytics.blogspot.de/2012/06/blog-post.html  Проверка нормальности распределения: http://r-analytics.blogspot.de/2012/06/blog-post_14.html  Выявление избыточного количества нулевых значений: http://r-analytics.blogspot.de/2012/06/blog-post_22.html  Выявление коллинеарности: http://r-analytics.blogspot.de/2012/07/blog-post.html  Выявление взаимодействий между предикторами: http://r-analytics.blogspot.de/2012/07/blog-post_13.html  Выявление автокорреляции http://r-analytics.blogspot.de/2012/07/blog-post_20.html Author: Sergey Mastitsky
  • 9. “…нет более мощного статистического инструмента, чем хорошо подобранный график” (Chambers et al., 1983) Всегда начинайте анализ данных с их визуалиции при помощи графиков, подходящих ситуации Chambers, J. M., Cleveland, W. S., Kleiner, B. and Tukey, P. A. (1983) Graphical Methods for Data Analysis. Wadsworth & Brooks/Cole Author: Sergey Mastitsky
  • 10.  Встроенные примеры: > demo(graphics)  R Graph Gallery: http://rgraphgallery.blogspot.com/  ggplot2: http://docs.ggplot2.org/current/ Author: Sergey Mastitsky
  • 11. 4.2. Основы создания графиков в R: диаграммы рассеяния Подробнее см.: http://r-analytics.blogspot.de/2011/10/r-plot.html http://r-analytics.blogspot.de/2011/10/r_18.html http://r-analytics.blogspot.de/2011/10/r_28.html
  • 12. > LWdata = read.table( file = "pH_down_experiment.txt", header = TRUE, sep = "t") > names(LWdata) > head(LWdata) > LWdata Author: Sergey Mastitsky
  • 13.  Функция общего назначения (generic function)  Позволяет выполнять тонкую настройку внешнего вида графиков => имеет очень много аргументов  Мы коснемся только самых азов этой огромной темы Author: Sergey Mastitsky
  • 14. > plot(LWdata$Length, LWdata$Weight) > # или используя интерфейс формулы: > plot(LWdata$Weight ~ LWdata$Length) Author: Sergey Mastitsky 10 15 20 25 30 35 0.00.20.40.60.81.01.2 Length Weight
  • 15. attach() делает содержимое таблицы данных видимым в т.н. поисковом окружении R => нет необходимости в $ > attach(LWdata) > plot(Weight ~ Length) Author: Sergey Mastitsky
  • 16. > plot(log(Weight) ~ log(Length)) > # Изменям заголовки осей: > plot(log(Weight) ~ log(Length), xlab = "log transformed Length", ylab = "log transformed Weight") Author: Sergey Mastitsky
  • 17. Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log(Length) log(Weight) выброс
  • 18. > identify(log(Weight) ~ log(Length)) Кликните рядом с подозрительной точкой, а затем - ESC… Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log(Length) log(Weight) 205
  • 19. > detach(LWdata) > LWdata <- LWdata[-205, ] > attach(LWdata) > # сработало? > plot(log(Weight) ~ log(Length)) Author: Sergey Mastitsky
  • 20. > plot(log(Weight) ~ log(Length), xlab = "log transformed Length", ylab = "log transformed Weight", pch = 2) Упражнение: Попробуйте другие значения pch … Author: Sergey Mastitsky
  • 21. Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log transformed Length logtransformedWeight
  • 22. > plot(log(Weight) ~ log(Length), xlab = "log transformed Length", ylab = "log transformed Weight", pch = 2, cex = 0.6) Author: Sergey Mastitsky
  • 23. Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log transformed Length logtransformedWeight
  • 24. > plot(log(Weight) ~ log(Length), xlab = "log transformed Length", ylab = "log transformed Weight", pch = 2, cex = 0.6, col = 2) Также применяется col = "red" См. colors() Author: Sergey Mastitsky
  • 25. Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log transformed Length logtransformedWeight
  • 26. > plot(log(Weight) ~ log(Length), xlab = "log transformed Length", ylab = "log transformed Weight", pch = 20, col = 2) Author: Sergey Mastitsky
  • 27. Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log transformed Length logtransformedWeight
  • 28. > plot(log(Weight) ~ log(Length), xlab = "log transformed Length", ylab = "log transformed Weight", pch = 20, col = as.numeric(Treatment)) > # вот как это работает: > as.numeric(Treatment) Author: Sergey Mastitsky
  • 29. Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log transformed Length logtransformedWeight
  • 30. > plot(log(Weight) ~ log(Length), xlab = "log transformed Length", ylab = "log transformed Weight", pch = 20, col = ifelse( Treatment == "Control", 1, 2)) условие да нет Author: Sergey Mastitsky
  • 31. Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log transformed Length logtransformedWeight
  • 32. > contr <- lm(log( Weight[Treatment == "Control"]) ~ log( Length[Treatment == "Control"])) > other <- lm(log( Weight[Treatment != "Control"]) ~ log( Length[Treatment != "Control"])) Author: Sergey Mastitsky
  • 33. > abline(contr, lty = 1, lwd = 2) > abline(other, lty =5, lwd = 2, col = "blue") Author: Sergey Mastitsky
  • 34. Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 log transformed Length logtransformedWeight
  • 35. > plot(log(Weight) ~ log(Length), xlab = "log transformed Length", ylab = "log transformed Weight", main = "Length/Weight relationship", pch = 20, col = ifelse( Treatment == "Control", 1, 2)) > abline(contr, lty = 1, lwd = 2) > abline(other, lty = 5, lwd = 2, col = "blue") Author: Sergey Mastitsky
  • 36. ! Не забудьте: detach(LWdata) Author: Sergey Mastitsky 2.5 3.0 3.5 -4-3-2-10 Length/Weight relationship log transformed Length logtransformedWeight
  • 37. 4.3. Основы создания графиков в R: гистограммы и диаграммы плотности вероятности Подробнее см.: http://r-analytics.blogspot.de/2011/11/r_06.html
  • 38.  Дают представление о форме распределения данных  В R гистограммы строятся очень просто: > hist(LWdata$Length) > hist(LWdata$Weight) Author: Sergey Mastitsky
  • 39. Histogram of LWdata$Length LWdata$Length Frequency 5 10 15 20 25 30 35 010203040 Histogram of LWdata$Weight LWdata$Weight Frequency 0.0 0.2 0.4 0.6 0.8 1.0 1.2 020406080100 Author: Sergey Mastitsky
  • 40. > hist(LWdata$Length, breaks = 50) Histogram of LWdata$Length LWdata$Length Frequency 10 15 20 25 30 35 0246812 Author: Sergey Mastitsky
  • 41.  Часто лучше гистограмм отображают свойства данных  Кривые плотности рассчитываеются при помощи функции density()  Эти кривые потом добавляются к графику при помощи функции lines() Author: Sergey Mastitsky
  • 42. # Расчет кривых для каждой группы: > attach(LWdata) > trControl = density(Length[Treatment == "Control"]) > trA = density(Length[Treatment == "A"]) > trB = density(Length[Treatment == "B"]) > trC = density(Length[Treatment == "C"]) # Построение графика: > plot(trControl, main =" ", ylim = c(0, 0.065), lty = 1) Author: Sergey Mastitsky
  • 43. # Добавление кривых: > lines(trA, col = 2) > lines(trB, col = 3) > lines(trC, col = 4) # Добавление легенды: > legend("topright", lty = c(1, 1, 1, 1), col = c(1:4), legend = c("Control", "A", "B", "C"), bty = "n") Author: Sergey Mastitsky
  • 44. Author: Sergey Mastitsky 0 10 20 30 40 0.000.020.040.06 N = 90 Bandwidth = 2.452 Density Control A B C
  • 45. 4.4. Основы создания графиков в R: графики квантилей
  • 46.  Позволяют проверить нормальность распределения данных  Наблюдаемые значени vs. их ожидаемые квантили => должна получаться примерно прямая диагональная линия  В R: > qqnorm(LWdata$Length) > qqnorm(LWdata$Weight) Author: Sergey Mastitsky
  • 47. Author: Sergey Mastitsky -3 -2 -1 0 1 2 3 101520253035 Theoretical Quantiles SampleQuantiles -3 -2 -1 0 1 2 3 0.00.20.40.60.81.01.2 Theoretical Quantiles SampleQuantiles
  • 48. 4.5. Основы создания графиков в R: диаграммы размахов Подробнее см.: http://r-analytics.blogspot.de/2011/11/r_08.html
  • 49. Медиана 0.75 квантиль (Q3) 0.75 квантиль (Q1) ИКР max в пределах Q3 + 1.5ИКР “выброс” Author: Sergey Mastitsky min в пределах Q1 - 1.5ИКР
  • 50. > boxplot(Weight/Length ~ Treatment) Author: Sergey Mastitsky Control A B C 0.0050.0150.0250.035
  • 51. 4.6. Основы создания графиков в R: столбиковые диаграммы Подробнее см.: http://r-analytics.blogspot.de/2012/01/r_20.html
  • 52.  Обобщают информацию о качественных переменных  Для создания служит функция barplot() (см. ?barlot)  Часто требуется кросс-табуляция при помощи xtabs()для подготовки таблицы сопряженности: > xtabs(~ Treatment) Treatment Control A B C 90 89 90 92 Author: Sergey Mastitsky
  • 53. > barplot(xtabs(~ Treatment)) Control A B C 020406080 Author: Sergey Mastitsky