12

私はいくつかのデータを調査しているので、最初にやりたかったことは、それに正規 (ガウス) 分布を当てはめることでした。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)

プロット1

カウントが必要なので、正規化係数 (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)

プロット2

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

私が間違っていることは何か分かりますか?もちろん、これで終わりというわけではありませんが、手順が少ないほど常に優れており、皆さんは常に、これらの一般的なタスクに対する最も洗練されたソリューションを考え出しています。

前もって感謝します!

ジェフリー

4

1 に答える 1

16

最初のエラーは、ggplot2 が数式で使用されている変数「count」をデータで見つけられないことを示しています。

統計はマッピングの後に行われます。つまり、サイズ -> x、カウント -> y です。

geom_smooth で nls を使用する例を次に示します。

ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + 
  geom_smooth(method="nls", formula = y ~ N * dnorm(x, m, s), se=F, 
              start=list(m=20, s=5, N=300)) 

ポイントは、数式の指定でサイズとカウントの代わりに x と y を使用することです。

于 2010-12-07T23:55:03.063 に答える