次のコマンドを使用してRから生成されたn=500のランダムなガウス変量を使用して、次のようにします。
Rscript -e 'cat(rnorm(500), sep="\\n")' > rnd.dat
正規化されたヒストグラムを定義するために、あなたとまったく同じアイデアを使用します。ここで、yは1 /(binwidth * n)として定義されますが、int
代わりに使用floor
し、bin値で最近使用しなかった点が異なります。要するに、これはsmooth.demデモスクリプトからの迅速な適応であり、同様のアプローチがJanertの教科書Gnuplot in Action(第13章、257ページ、無料で入手可能)に記載されています。サンプルデータファイルは、Gnuplotに付属random-points
のフォルダにあるものに置き換えることができます。demo
ファイル内のレコードのカウント機能がないため、ポイント数をGnuplotとして指定する必要があることに注意してください。
bw1=0.1
bw2=0.3
n=500
bin(x,width)=width*int(x/width)
set xrange [-3:3]
set yrange [0:1]
tstr(n)=sprintf("Binwidth = %1.1f\n", n)
set multiplot layout 1,2
set boxwidth bw1
plot 'rnd.dat' using (bin($1,bw1)):(1./(bw1*n)) smooth frequency with boxes t tstr(bw1)
set boxwidth bw2
plot 'rnd.dat' using (bin($1,bw2)):(1./(bw2*n)) smooth frequency with boxes t tstr(bw2)
これが2つのビン幅の結果です

さらに、これは実際にはヒストグラムへの大まかなアプローチであり、Rではより詳細なソリューションをすぐに利用できます。実際、問題は適切なビン幅を定義する方法であり、この問題はstats.stackexchange.comですでに説明されています:Freedman-の使用四分位範囲を計算する必要がありますが、ダイアコニスビニングルールの実装はそれほど難しくありません。
これは、Rが同じデータセットをどのように処理するかを示しています。デフォルトのオプション(この特定のケースでは違いがないため、Sturgesルール)と上記で使用したような等間隔のビンを使用します。

使用されたRコードを以下に示します。
par(mfrow=c(1,2), las=1)
hist(rnd, main="Sturges", xlab="", ylab="", prob=TRUE)
hist(rnd, breaks=seq(-3.5,3.5,by=.1), main="Binwidth = 0.1",
xlab="", ylab="", prob=TRUE)
呼び出し時に返される値を調べることで、Rがどのように機能するかを確認することもできますhist()
。
> str(hist(rnd, plot=FALSE))
List of 7
$ breaks : num [1:14] -3.5 -3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 ...
$ counts : int [1:13] 1 1 12 20 49 79 108 87 71 43 ...
$ intensities: num [1:13] 0.004 0.004 0.048 0.08 0.196 0.316 0.432 0.348 0.284 0.172 ...
$ density : num [1:13] 0.004 0.004 0.048 0.08 0.196 0.316 0.432 0.348 0.284 0.172 ...
$ mids : num [1:13] -3.25 -2.75 -2.25 -1.75 -1.25 -0.75 -0.25 0.25 0.75 1.25 ...
$ xname : chr "rnd"
$ equidist : logi TRUE
- attr(*, "class")= chr "histogram"
必要に応じて、Rの結果を使用してGnuplotでデータを処理できると言っても過言ではありません(ただし、Rを直接使用することをお勧めします:-)。