R ggplot2 scatterplot: добавление цвета для уровня отклонения от (регрессии) линии geom_smooth - PullRequest
1 голос
/ 22 января 2020

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

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

ggplot(data_mean, aes(x= policy1, y= policy2 ))+
  geom_point(aes(colour = group), size=4) +geom_text_repel(aes(label=iso),hjust=0, vjust=0) + 
  geom_smooth(method=lm, se=FALSE, size=0.1) +
  scale_color_manual(name = "Country Categories", # or name = element_blank()
 values=colors) +
theme(legend.position="bottom",
       legend.title=element_blank()) 

Можно ли раскрасить наблюдения на диаграмме рассеяния в цвете на основе их расстояния от линии регрессии? Спасибо!

1 Ответ

1 голос
/ 22 января 2020

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

Сначала что-то похожее на ваши данные, с некоторой ошибкой вводится в policy2

set.seed(888)
data_mean=data.frame(policy1=1:20,policy2=1:20 + rnbinom(20,mu=2,size=2))
data_mean$residuals = abs(lm(policy2~policy1,data=data_mean)$residuals)
# here we define the outliers to be those more than 2 standard error of residuals
data_mean$group = data_mean$residuals > 2*sd(data_mean$residuals)
data_mean$iso = letters[1:20]

Затем мы строим график:

ggplot(data_mean, aes(x= policy1, y= policy2))+
geom_point(aes(colour = group), size=4) +
geom_text_repel(aes(label=iso),hjust=0, vjust=0) + 
geom_smooth(method=lm, se=FALSE, size=0.1) +
theme(legend.position="bottom",
       legend.title=element_blank()) 

enter image description here

На самом деле одна альтернатива заключается в использовании непрерывной шкалы:

ggplot(data_mean, aes(x= policy1, y= policy2))+
  geom_point(aes(colour = residuals), size=4) +
geom_text_repel(aes(label=iso),hjust=0, vjust=0) + 
geom_smooth(method=lm, se=FALSE, size=0.1) +
theme(legend.position="bottom",
       legend.title=element_blank()) +
  scale_color_viridis()

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...