データセットにいくつかのポイントがあり、その上に線を合わせたいと思います。 loess
関数で試しました。残念ながら、非常に奇妙な結果が得られます。以下のプロットを参照してください。ポイントを通過し、プロット全体に広がる線が期待されます。どうすればそれを達成できますか?
再現方法:
https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1 (2 kbのみ)からデータセットをダウンロードし、次のコードを使用します。
load(url('https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1'))
lw1 = loess(y ~ x,data=data)
plot(y ~ x, data=data,pch=19,cex=0.1)
lines(data$y,lw1$fitted,col="blue",lwd=3)
どんな助けも大歓迎です。ありがとう!
y
ではなくx
に対して近似値をプロットしました。また、ラインをプロットする前にx値を順序付ける必要があります。これを試して:
lw1 <- loess(y ~ x,data=data)
plot(y ~ x, data=data,pch=19,cex=0.1)
j <- order(data$x)
lines(data$x[j],lw1$fitted[j],col="red",lwd=3)
遅れることもありますが、ggplot(およびdplyr)にはオプションがあります。まず、ポイント上に黄土線のみをプロットする場合は、次を試すことができます。
_library(ggplot2)
load(url("https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1"))
ggplot(data, aes(x, y)) +
geom_point() +
geom_smooth(method = "loess", se = FALSE)
_
その他の方法は、predict()
関数による黄土適合を使用することです。たとえば、dplyr関数を使用して、_"loess"
_という新しい列に予測を追加しました。
_ library(dplyr)
data %>%
mutate(loess = predict(loess(y ~ x, data = data))) %>%
ggplot(aes(x, y)) +
geom_point(color = "grey50") +
geom_line(aes(y = loess))
_
更新:提供されたサンプルデータをロードするコード行を追加pdate2:@phiコメントを調整するgeom_smoot()
関数名の修正
残念ながら、データはもう利用できませんが、ノンパラメトリックライン(ローカルウェイト散布図スムージングまたは必要に応じてLOESSのみ)をフィットする簡単な方法は、次のコードを使用することです:
scatter.smooth(y ~ x, span = 2/3, degree = 2)
パラメータspan
およびdegree
を使用して、任意の滑らかさを得ることができることに注意してください。