2013-03-26 4 views
46

Sto cercando di aggiungere una linea di regressione su un ggplot. Per prima cosa ho provato con abline ma non sono riuscito a farlo funzionare. Poi ho provato questo ...Aggiunta di una linea di regressione su un ggplot

data = data.frame(x.plot=rep(seq(1,5),10),y.plot=rnorm(50)) 
ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm',formula=data$y.plot~data$x.plot) 

Ma non sta funzionando neanche.

risposta

77

In generale, per fornire la propria formula si dovrebbe utilizzare argomenti x e y che corrispondono ai valori che hai fornito in ggplot() - in questo caso x verrà interpretato come x.plot e y come y.plot. Ulteriori informazioni sui metodi di livellamento e sulla formula sono disponibili nella pagina della guida della funzione stat_smooth() in quanto è la statistica predefinita utilizzata da geom_smooth().

ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm',formula=y~x) 

Se si utilizza lo stesso valori xey che avete fornito nella chiamata ggplot() e la necessità di tracciare la linea di regressione lineare, allora non c'è bisogno di usare la formula all'interno geom_smooth(), solo forniscono il method="lm".

ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
    geom_smooth(method='lm') 
5

Come ho appena pensato, nel caso in cui si ha un modello montato sulla regressione lineare multipla, la soluzione di cui sopra non funzionerà.

È necessario creare manualmente la linea come un dataframe che contiene i valori previsti per il proprio dataframe originale (nel proprio caso data).

Sarebbe simile a questa:

# read dataset 
df = mtcars 

# create multiple linear model 
lm_fit <- lm(mpg ~ cyl + hp, data=df) 
summary(lm_fit) 

# save predictions of the model in the new data frame 
# together with variable you want to plot against 
predicted_df <- data.frame(mpg_pred = predict(lm_fit, df), hp=df$hp) 

# this is the predicted line of multiple linear regression 
ggplot(data = df, aes(x = mpg, y = hp)) + 
    geom_point(color='blue') + 
    geom_line(color='red',data = predicted_df, aes(x=mpg_pred, y=hp)) 

Multiple LR

# this is predicted line comparing only chosen variables 
ggplot(data = df, aes(x = mpg, y = hp)) + 
    geom_point(color='blue') + 
    geom_smooth(method = "lm", se = FALSE) 

Single LR

1

Se si desidera inserire altri tipi di modelli, come una curva dose-risposta utilizzando modelli logistici voi sarebbe anche necessario creare più punti dati con la funzione di previsione se si desidera avere una linea di regressione più regolare:

fit: la vostra misura di una curva di regressione logistica

#Create a range of doses: 
mm <- data.frame(DOSE = seq(0, max(data$DOSE), length.out = 100)) 
#Create a new data frame for ggplot using predict and your range of new 
#doses: 
fit.ggplot=data.frame(y=predict(fit, newdata=mm),x=mm$DOSE) 

ggplot(data=data,aes(x=log10(DOSE),y=log(viability)))+geom_point()+ 
geom_line(data=fit.ggplot,aes(x=log10(x),y=log(y)))