Разведочный анализ данных: создание графиков в...
Post on 25-May-2015
7.092 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
> 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
Позволяют проверить нормальность
распределения данных
Наблюдаемые значени 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
top related