ガウス分布分布のフィッティングとガウス密度曲線のフィッティングには違いがあります。normalmixEM
は前者です。必要なのは(おそらく)後者です。
分布の適合は、大まかに言って、ヒストグラムを作成した場合に行うことです。あなたのデータの、そしてそれがどのような形をしていたかを見ようとしました。代わりに、あなたがしていることは、単に曲線をプロットすることです。その曲線は、ガウス密度関数をプロットすることによって得られるもののように、たまたま中央にこぶがあります。
必要なものを得るには、 optim
のようなものを使用して、曲線をデータに適合させることができます。次のコードは、非線形最小二乗を使用して、最適なガウス曲線を与える3つのパラメーターを見つけます。m
はガウス平均、s
は標準偏差、k
は任意のスケーリングパラメーターです(ガウス密度は1に統合されるように制約されていますが、データは統合されていません。
x <- seq_along(r) f <- function(par) { m <- par[1] sd <- par[2] k <- par[3] rhat <- k * exp(-0.5 * ((x - m)/sd)^2) sum((r - rhat)^2) } optim(c(15, 2, 1), f, method="BFGS", control=list(reltol=1e-9))
コメント
この分析には非線形最小二乗を使用することを提案します。
# First present the data in a data-frame tab <- data.frame(x=seq_along(r), r=r) #Apply function nls (res <- nls( r ~ k*exp(-1/2*(x-mu)^2/sigma^2), start=c(mu=15,sigma=5,k=1) , data = tab))
そして、出力から、次の近似された「ガウス曲線」を取得できました。
v <- summary(res)$parameters[,"Estimate"] plot(r~x, data=tab) plot(function(x) v[3]*exp(-1/2*(x-v[1])^2/v[2]^2),col=2,add=T,xlim=range(tab$x) )
フィット感は驚くべきものではありません… $ x \ mapsto \ sin(x)/ x $関数はより良いモデル?
コメント