Нанесите более одной линии регрессии на диаграмму рассеяния с помощью facet () и добавьте коэффициент наклона к каждой линии - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу построить линии регрессии для каждого города на диаграмме рассеяния.

Датафрейм выглядит так:

     df
            City      str    testscr
19     Los Angeles 22.70402  619.80
31       San Diego 20.60697  624.55
33     Los Angeles 21.53581  625.30
35  San Bernardino 21.19407  626.10
36     Los Angeles 21.86535  626.80
45       Riverside 19.26697  628.75
46     Los Angeles 23.30189  629.80
63          Orange 21.94756  633.15
67     Los Angeles 20.68242  634.05
69       San Diego 21.78650  634.10
72     Los Angeles 21.15289  634.40
76  San Bernardino 18.98373  634.95
86  San Bernardino 19.30676  636.60
87       Riverside 20.89231  636.70
105 San Bernardino 19.75422  639.35
114         Orange 19.62662  640.75
118      San Diego 20.08452  641.45
126      Riverside 22.81818  643.20
128    Los Angeles 21.37363  643.40
146      San Diego 19.79654  645.55
156         Orange 21.04869  646.70
157         Orange 20.17544  646.90
160      San Diego 20.29137  647.25
168      San Diego 17.15328  648.70
169 San Bernardino 22.34977  648.95
170         Orange 22.17007  649.15
191         Orange 23.01438  652.10
200      Riverside 21.03721  653.40

Мой подход был:

ggplot(data=df,aes(x=str,y=testscr))+
  geom_point()+
  geom_smooth(method="lm",se=FALSE)+
  facet_grid(. ~City)

Есть ли умнее или лучше? И как я могу добавить коэффициент наклона к каждой линии регрессии?

1 Ответ

2 голосов
/ 04 апреля 2019

Давайте сначала разберемся с группами, а затем ответим во второй части о добавлении меток.

Если вы хотите построить график по группам, в основном есть два варианта.Первое - это огранка, как у вас.Второй - сгруппировать точки, либо явно используя aes(group = City), либо с помощью другой эстетики, такой как aes(color = City).

Если при втором подходе создается грязный график, например, с множеством пересекающихся линий, то этолучше всего использовать фасеты.

Несколько примеров использования набора данных iris.

Сначала группируем по цвету:

library(ggplot2)
iris %>% 
  ggplot(aes(Petal.Length, Sepal.Length)) + 
  geom_point(aes(color = Species)) + 
  geom_smooth(method = "lm", 
              aes(color = Species), 
              se = FALSE)

enter image description here

Группировка по группам:

iris %>% 
  ggplot(aes(Petal.Length, Sepal.Length)) + 
  geom_point(aes(group = Species)) + 
  geom_smooth(method = "lm", 
              aes(color = Species), 
              se = FALSE)

enter image description here

Использование фасетов:

iris %>% 
  ggplot(aes(Petal.Length, Sepal.Length)) + 
  geom_point() + 
  geom_smooth(method = "lm", 
              se = FALSE) +
  facet_wrap(~Species)

enter image description here

Для добавления меток, таких как коэффициенты, посмотрите на пакет ggpmisc .Вот один из способов добавить коэффициенты, используя stat_fit_tb:

iris %>% 
  ggplot(aes(Petal.Length, Sepal.Length)) + 
  geom_point() + 
  geom_smooth(method = "lm", 
              se = FALSE) + 
  facet_wrap(~Species) + 
  stat_fit_tb(method = "lm", 
              tb.type = "fit.coefs")

enter image description here

...