создание доверительной зоны для нормально распределенной диаграммы рассеяния в ggplot2 и R - PullRequest
10 голосов
/ 01 ноября 2011

У меня есть некоторые данные, скажем (на самом деле, у меня есть большой объем данных):

x   y
0.1 0.267
0.2 0.254
0.3 0.182
0.4 0.173
0.5 0.121
0.6 0.089
0.7 0.070
0.8 0.056
0.9 0.031

Эти данные примерно соответствуют кривой тренда, которую я строю с помощью ggplot stat_smooth (). stat_smooth создает серую область, которая на 95% уверена, что линия тренда попадет внутрь.

Вместо этого я хотел бы создать серую область, вокруг которой будет линия тренда, - создать серую область, вокруг которой точки данных будут падать с вероятностью 95%, предполагая нормальное распределение вокруг линии тренда.

Еще один способ сказать это: я хочу, чтобы smooth_lines соединяли вершины и впадины полос ошибок и затеняли промежуточное положение в ggplot. Как мне это сделать?

Спасибо.

1 Ответ

21 голосов
/ 01 ноября 2011

То, что вы ищете, по сути называется интервалом прогнозирования. Вот один из способов сделать это в ggplot2

library(ggplot2)

# RUN REGRESSION AND APPEND PREDICTION INTERVALS
lm_fit  = lm(total_bill ~ tip, data = tips)
tips_with_pred = data.frame(tips, predict(lm_fit, interval = 'prediction'))

# PLOT WITH REGRESSION LINE, CONFIDENCE INTERVAL AND PREDICTION INTERVAL
p0 <- ggplot(tips_with_pred, aes(x = tip, y = total_bill)) + 
  geom_point() +
  geom_smooth(method = 'lm', aes(fill = 'confidence'), alpha = 0.5) +
  geom_ribbon(aes(y = fit, ymin = lwr, ymax = upr, fill = 'prediction'),
    alpha = 0.2) +
  scale_fill_manual('Interval', values = c('green', 'blue')) +
  opts(legend.position = c(0.20, 0.85))

enter image description here

...