2013-03-26 52 views
46

我在努力在ggplot上添加回歸線。我第一次嘗試了abline,但我沒有設法使它工作。然後我試了這個...在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) 

但它也不工作。

回答

77

一般情況下,提供自己的公式,你應該使用參數xy,將對應於你ggplot()提供的值 - 在這種情況下x將被解釋爲x.plotyy.plot。關於平滑的方法和公式,你可以在功能stat_smooth()幫助頁面找到,因爲它是由geom_smooth()使用默認統計的更多信息。

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

如果您使用的是相同的x和您在ggplot()呼叫提供的,需要繪製線性迴歸線那麼你並不需要使用內部geom_smooth()公式y值,只需提供該method="lm"

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

正如我剛纔算了一下,如果你有一個模型擬合多元線性迴歸,上述方案將無法工作。

您必須手動創建您的行包含您的原始數據幀的預測值(在你的情況data)一個數據幀。

它應該是這樣的:

# 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

如果你想使用邏輯的模型,你適合其他類型的機型,喜歡的劑量反應曲線也需要用函數來創建更多的數據點,如果你想有一個平滑的迴歸線預測:

擬合:您的Logistic迴歸曲線擬合

#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)))