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

53
Тема 4 Сергей Мастицкий БГУ, Минск, май 2014

description

Приведены примеры создания некоторых распространенных статистических графикоы в среде статистических вычислений R.

Transcript of Разведочный анализ данных: создание графиков в...

Тема 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.0

0

.2

0.4

0

.6

0.8

1

.0

1.2

Length

We

igh

t

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

-1

0

log(Length)

log

(We

igh

t)

выброс

> identify(log(Weight) ~ log(Length))

Кликните рядом с

подозрительной точкой,

а затем - ESC…

Author: Sergey Mastitsky

2.5 3.0 3.5

-4

-3

-2

-1

0

log(Length)

log(W

eig

ht)

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

-1

0

log transformed Length

log

tra

nsfo

rme

d W

eig

ht

> 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

-1

0

log transformed Length

log tra

nsfo

rmed W

eig

ht

> 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

-1

0

log transformed Length

log t

ran

sfo

rmed

Weig

ht

> 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

-1

0

log transformed Length

log

tra

nsfo

rme

d W

eig

ht

> 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

-1

0

log transformed Length

log tra

nsfo

rmed W

eig

ht

> 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

-1

0

log transformed Length

log tra

nsfo

rmed W

eig

ht

> 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

-1

0

log transformed Length

log tra

nsfo

rmed W

eig

ht

> 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

-1

0

Length/Weight relationship

log transformed Length

log t

ransfo

rme

d W

eig

ht

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

Fre

qu

en

cy

5 10 15 20 25 30 35

01

02

03

04

0

Histogram of LWdata$Weight

LWdata$Weight

Fre

qu

en

cy

0.0 0.2 0.4 0.6 0.8 1.0 1.2

02

04

06

08

01

00

Author: Sergey Mastitsky

> hist(LWdata$Length, breaks = 50)

Histogram of LWdata$Length

LWdata$Length

Fre

qu

en

cy

10 15 20 25 30 35

02

46

81

2

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.0

0

0.0

2

0.0

4

0.0

6

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

10

1

5

20

2

5

30

3

5

Theoretical Quantiles

Sam

ple

Qua

ntile

s

-3 -2 -1 0 1 2 3

0.0

0

.2

0.4

0

.6

0.8

1

.0

1.2

Theoretical Quantiles

Sa

mp

le Q

ua

ntile

s

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.0

05

0

.01

5

0.0

25

0

.03

5

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

02

04

06

08

0

Author: Sergey Mastitsky