私はいくつかのデータを調査しているので、最初にやりたかったことは、それに正規 (ガウス) 分布を当てはめることでした。Rでこれを試すのはこれが初めてなので、一度に1ステップずつ進めています。まず、データを事前にビニングしました。
myhist = data.frame(size = 10:27, counts = c(1L, 3L, 5L, 6L, 9L, 14L, 13L, 23L, 31L, 40L, 42L, 22L, 14L, 7L, 4L, 2L, 2L, 1L) )
qplot(x=size, y=counts, data=myhist)
カウントが必要なので、正規化係数 (N) を追加して密度を拡大する必要があります。
fit = nls(counts ~ N * dnorm(size, m, s), data=myhist, start=c(m=20, s=5, N=sum(myhist$counts)) )
次に、表示用の適合データを作成すると、すべてがうまく機能します。
x = seq(10,30,0.2)
fitted = data.frame(size = x, counts=predict(fit, data.frame(size=x)) )
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_line(data=fitted)
geom_smooth() を使用してすべてを 1 つのステップで実行することについて話しているこのスレッドを見つけたとき、私は興奮しましたが、それを機能させることができません:
これが私が試したことです...そして私が得たものは次のとおりです。
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_smooth(method="nls", formula = counts ~ N * dnorm(size, m, s), se=F, start=list(m=20, s=5, N=300, size=10))
Error in method(formula, data = data, weights = weight, ...) :
parameters without starting value in 'data': counts
エラーは、観測された変数countsに適合しようとしていることを示しているようですが、それは意味がありません。また、 counts にも「開始」値を指定すると、予想通り異常になります。
fitting parameters ‘m’, ‘s’, ‘N’, ‘size’, ‘counts’ without any variables
Error in eval(expr, envir, enclos) : object 'counts' not found
私が間違っていることは何か分かりますか?もちろん、これで終わりというわけではありませんが、手順が少ないほど常に優れており、皆さんは常に、これらの一般的なタスクに対する最も洗練されたソリューションを考え出しています。
前もって感謝します!
ジェフリー