Как построить линии нелинейной регрессии внутри групп и общих данных в ggplot2?

У меня есть простой набор данных с двумя непрерывными переменными (Vesicle и Cells) и одна группирующая переменная с двумя уровнями (HC и RA), смоделированные здесь:

###Simulate Vesicle variable###
Vesicle.hc <- sort(runif(23, 0.98, 5)) #HC group
Vesicle1.ra <- sort(runif(5, 0.98, 3)) #RA group
Vesicle <- c(Vesicle.hc, Vesicle1.ra)  #Combined

###Simulate Cells variable###
z <- seq(23)
Cells.hc <- (rnorm(23, 50 + 30 * z^(0.2), 8))*runif(1, 50000, 400000) #HC group
Cells.ra <- c(8.36e6, 6.35e6, 1.287e7, 1.896e7, 1.976e7)               #RA group
Cells <- c(Cells.hc, Cells.ra)                                         #Combined

###Define groups and create dataframe###
Group <- rep("HC",23)                                #HC group
Group1 <- rep("RA",5)                                #RA Group
Group <- c(Group, Group1)                            #Combined
df <- data.frame(Cells, Vesicle, Group)              #Data frame

Я построил диаграмму рассеяния данных с помощью ggplot2 с линиями нелинейной регрессии (показаны здесь ), подходящие для каждой группы индивидуально с использованием:

###Plot data###
library(ggplot2)
ggplot(df, aes(x = Cells, y = Vesicle, colour=Group)) +
  xlab("Stimulated neutrophils") +
  ylab("MV/cell") +
  stat_smooth(method = 'nls', formula = 'y~a*exp(b*x)',                     #Fit nls model
              method.args = list(start=c(a=0.1646, b=9.5e-8)), se=FALSE) +  #Starting values
  geom_point(size=4, pch=21,color = "black", stroke=1.5, aes(fill=Group))   #Change point style

Мой вопрос: помимо построения функций нелинейной регрессии для каждой группы, как я могу также построить линию регрессии, подходящую для всех данных, то есть моделирования данных, игнорируя вклад группирующей переменной?


person Hefin    schedule 14.07.2016    source источник
comment
У вас есть неожиданный символ при создании Cells.hc. Кроме того, я не вижу, где создается z.   -  person Hack-R    schedule 14.07.2016
comment
О, мои искренние извинения, у меня уже были эти переменные в моей среде, когда я делал рабочий пример - как я небрежно с моей стороны. Отредактированный код теперь должен работать. Я попробовал ваше предложение @Axeman, но, хотя ошибок нет, сюжет также не изменился.   -  person Hefin    schedule 15.07.2016


Ответы (1)


ggplot(df, aes(x = Cells, y = Vesicle, colour=Group)) +
    xlab("Stimulated neutrophils") +
    ylab("MV/cell") +
    stat_smooth(method = 'nls', formula = 'y~a*exp(b*x)',
                method.args = list(start=c(a=0.1646, b=9.5e-8)), se=FALSE) +
    stat_smooth(color = 1, method = 'nls', formula = 'y~a*exp(b*x)',
                method.args = list(start=c(a=0.1646, b=9.5e-8)), se=FALSE) +
    geom_point(size=4, pch=21,color = "black", stroke=1.5, aes(fill=Group))

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

person Axeman    schedule 15.07.2016
comment
Красиво спасибо. Таким образом, простое добавление color = 1 предотвращает наследование stat_smooth групповых классификаций. - person Hefin; 15.07.2016
comment
Да вот и все. Также есть аргумент inherit.aes, но это означает, что вы снова определили x и y, поэтому часто проще аннулировать группировку. - person Axeman; 15.07.2016