GGplot geom_smooth точно подгоняет одну линию, а другую как прямую - PullRequest
1 голос
/ 04 августа 2020

У меня есть набор данных, в котором красная линия, изображенная ниже, основана на 2400 точках данных. Зеленая линия основана на 220 точках данных.

Я запускаю ggplot как таковой:

ggplot(data,aes(HB_PRE_MIN,d30, color = factor(preop_transfusion_factor))) +
  geom_smooth()

И он создает этот график

enter image description here

With this output: geom_smooth() using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

If i try to do a geom_smooth where i filter the data to be only the 220 who have preop_transfusion_factor == 1, that is the green curve, i get this curve, which i think is the way the green curve should have looked like if it was correct. Code:

ggplot(data = data %>% filter(preop_transfusion_factor == 1),aes(HB_PRE_MIN,d30)) +
  geom_smooth() + scale_x_continuous(breaks = seq(0,12,by = 1))

введите описание изображения здесь

Резюме:

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

Я пробовал использовать ключевое слово «group» вместо цвета, но результат тот же, что и для зеленой кривой, с фактором = 1, превращаясь в плоскую линию.

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

С уважением.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Обновить Я нашел решение. Оказывается, первая кривая (красная кривая с 2400 точками данных) автоматически выбирает method = 'gam', который соответствует 2400 точкам данных

синяя кривая, то есть та, которая соответствует 220 точкам данных, автоматически выбирает «лёсс».

Если я выберу «лёсс» для обоих наборов данных, тогда я получу более подходящий вариант для них обоих.

С уважением.

1 голос
/ 04 августа 2020

Это не элегантно, но попробуйте переместить два уровня в разные наборы данных. Затем используйте два вызова geom_smooth:

preop0 <- data %>% filter(preop_transfusion_factor == 0)
preop1 <- data %>% filter(preop_transfusion_factor == 1)


ggplot() +
   geom_smooth(aes(data = preop0, HB_PRE_MIN,d30)) +
   geom_smooth(aes(data = preop1, HB_PRE_MIN,d30))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...