2013-03-26 20 views
46

私はggplotに回帰直線を追加しようとしています。私は最初にアブラインで試しましたが、それを機能させることはできませんでした。それから私はこれを試しました...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) 

しかし、それはどちらも動作していません。この場合にはxy.plotとしてx.plotyとして解釈されます - あなたはggplot()で提供される値に対応した引数xyを使用する必要があり、独自の数式を提供するために、一般的には

答えて

77

、。関数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) 

あなたは、あなただけのmethod="lm"を供給し、geom_smooth()内の数式を使用する必要はありませんあなたはggplot()コールで供給され、同じxとyの値を使用して回帰直線をプロットする必要がある場合。私はちょうど考え出したよう

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

さらにスムーズな回帰直線を作成したい場合は、関数predictでさらに多くのデータポイントを作成する必要があります。

フィット:ロジスティック回帰曲線のフィット度

#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))) 
関連する問題