回答:
一般的に、独自の数式を提供するには、引数x
を使用する必要があります。これは、指定y
した値に対応します。ggplot()
この場合x
、x.plot
およびy
として解釈されy.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)
ggplot()
呼び出しで指定したものと同じx値とy値を使用していて、線形回帰直線をプロットする必要がある場合は、内部geom_smooth()
で数式を使用する必要はありませんmethod="lm"
。
ggplot(data,aes(x.plot, y.plot)) +
stat_summary(fun.data= mean_cl_normal) +
geom_smooth(method='lm')
先ほど説明したように、モデルが複数の線形回帰に適合している場合、上記の解決策は機能しません。
元のデータフレーム(この場合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))
# 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)
を使用した明白な解決策geom_abline
:
geom_abline(slope = data.lm$coefficients[2], intercept = data.lm$coefficients[1])
オブジェクトdata.lm
はどこにあり、次のようlm
になりdata.lm$coefficients
ます:
data.lm$coefficients
(Intercept) DepDelay
-2.006045 1.025109
実際には、を使用stat_function
して回帰直線をxの関数としてプロットしますpredict
。
stat_function(fun = function(x) predict(data.lm, newdata = data.frame(DepDelay=x)))
デフォルトではn=101
ポイントが計算されるため、これは少し効率的ではありませんが、predict
非線形などのをサポートする任意のモデルの予測曲線をプロットするため、はるかに柔軟ですnpreg
パッケージnpからのです。
注:を使用しscale_x_continuous
たり、scale_y_continuous
一部の値が切り捨てられたりして、geom_smooth
正しく動作しない場合があります。代わりにズームに使用coord_cartesian
します。
+0
名前を使用するだけの追加について心配する必要はありません。data.lm$coefficients[['(Intercept)']]
とdata.lm$coefficients[['DepDelay']]
。
(Intercept)
最初にリストされます。名前はコードをより明確にします。
この機能をブログで見つけました
ggplotRegression <- function (fit) {
`require(ggplot2)
ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) +
geom_point() +
stat_smooth(method = "lm", col = "red") +
labs(title = paste("Adj R2 = ",signif(summary(fit)$adj.r.squared, 5),
"Intercept =",signif(fit$coef[[1]],5 ),
" Slope =",signif(fit$coef[[2]], 5),
" P =",signif(summary(fit)$coef[2,4], 5)))
}`
関数をロードしたら、簡単に
ggplotRegression(fit)
あなたも行くことができます ggplotregression( y ~ x + z + Q, data)
お役に立てれば。
ロジスティックモデルを使用した用量反応曲線のように、他のタイプのモデルに適合させたい場合、より滑らかな回帰直線が必要な場合は、関数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)))