web-dev-qa-db-ja.com

ヒストグラムを確率としてプロットする(相対頻度)

ヒストグラムをPDF(確率)としてプロットするのに問題があります

データセット全体で比較しやすくするために、すべてのピースの合計が1つの領域に等しくなるようにします。何らかの理由で、ブレーク(デフォルトの4またはひどいもの)を指定するたびに、ビンを確率としてプロットするのではなく、ビンを頻度カウントとしてプロットします。

hist(data[,1], freq = FALSE, xlim = c(-1,1), breaks = 800)

この行を何に変更する必要がありますか?確率分布と多数のビンが必要です。 (600万のデータポイントがあります)

これはRヘルプにありますが、オーバーライドする方法がわかりません。

freq logical; TRUEの場合、ヒストグラムグラフィックは度数、結果のカウントコンポーネントを表します。 FALSEの場合、確率密度、コンポーネント密度がプロットされます(したがって、ヒストグラムの合計面積は1になります)。ブレークが等距離である場合(および確率が指定されていない場合)にのみ、デフォルトはTRUEです。

ありがとう

詳細を編集する

うーん、私のプロットは1より上になります。ビンの幅とどう関係するかがわかりました。私は多かれ少なかれ、まだ多くのビンを持ちながら、すべてのビンを1ポイントの価値にしたいと考えています。つまり、1.0に直接なり、他のすべてのビンが0.0でない限り、1.0を超えるビンの高さはありません。現状では、15.0前後のこぶを作るビンがあります

編集:ビン@Dwinの%ポイント単位の高さ:だから、どのように確率をプロットするのですか?積分を取ると、x軸上の単位のために1.0が得られることに気付きますが、これは私が望むものではありません。 100個のポイントがあり、そのうち5個が最初のビンに落ちた場合、そのビンの高さは.05になります。これは私が欲しいものです。私はそれを間違っていますか、これを行う別の方法がありますか?

ポイントの数はわかっています。頻度ヒストグラムの各ビンカウントをこの数で割る方法はありますか?

17
SwimBikeRun

密度ではなく確率をプロットする要求に答えるには:

h <- hist(vec, breaks = 100, plot=FALSE)
h$counts=h$counts/sum(h$counts)
plot(h)
40
42-

本気ですか?これは私のために働いています:

> vec <- rnorm(6000000)
> 
> h <- hist(vec, breaks = 800, freq = FALSE)
> sum(h$density)
[1] 100
> unique(zapsmall(diff(h$breaks)))
[1] 0.01

最後の2つの結果を乗算すると、確率密度の合計が1になります。ここでは、ビンの幅が重要であることに注意してください。

これは

> sessionInfo()
R version 3.0.1 RC (2013-05-11 r62732)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.0.1
2
Gavin Simpson

デフォルトのブレーク数はlog2(N)で、Nは600万です。22です。4つのブレークしか表示されない場合は、xlimがコール。これは、基礎となるヒストグラムを変更せず、プロットされる部分のみに影響します。もしあなたがそうするなら

h <- hist(data[,1], freq=FALSE, breaks=800)
sum(h$density * diff(h$breaks))

結果は1になります。


データの密度は、その測定単位に関連しています。したがって、「ビンの高さは1.0を超えないようにする」ことが実際に意味があることを確認する必要があります。たとえば、フィート単位の測定値があるとします。測定値のヒストグラムを密度としてプロットします。次に、すべての測定値をインチに変換し(12倍する)、別の密度ヒストグラムを作成します。データが本質的に同じであっても、密度の高さは元の1/12になります。同様に、すべての数値に15を掛けることにより、ビンの高さをすべて1未満にすることができます。

値1.0には何らかの意味がありますか?

2
Hong Ooi

ヒストグラムでは、密度=相対頻度/対応するビン幅

例1:

nums = c(10、41、10、28、22、8、31、3、9、9)

h2 = hist(nums、plot = F)

rf2 = h2 $ counts/sum(h2 $ counts)

d2 = rf2/diff(h2 $ breaks)

h2 $ density

[1] 0.06 0.00 0.02 0.01 0.01

d2

[1] 0.06 0.00 0.02 0.01 0.01

例2:

nums = c(10、41、10、28、22、8、31、3、9、9)

h3 = hist(nums、plot = F、breaks = c(1,30,40,50))

rf3 = h3 $ counts/sum(h3 $ counts)

d3 = rf3/diff(h3 $ breaks)

h3 $ density

[1] 0.02758621 0.01000000 0.01000000

d3

[1] 0.02758621 0.01000000 0.01000000

0
Nagababu Tubati