2011-08-07 16 views
17

データセットがあり、このデータを確率密度関数または確率質量関数でRで分析したいのですが、私は密度関数を使用していましたが、このようなデータセットの確率密度/質量関数をプロットするR

私のデータは:私は、データ配信のための特別な種類を持っていないので、

私はエネルギーのベクトルにPDF/PMFを取得したい
"step","Time","energy" 
1, 22469 , 392.96E-03 
2, 22547 , 394.82E-03 
3, 22828,400.72E-03 
4, 21765, 383.51E-03 
5, 21516, 379.85E-03 
6, 21453, 379.89E-03 
7, 22156, 387.47E-03 
8, 21844, 384.09E-03 
9 , 21250, 376.14E-03 
10, 21703, 380.83E-03 

、我々は考慮に入れたデータは、本質的に離散的です。

+1

あり、「確率密度関数」でしょう連続的な値については、我々は経験的密度を推定するための間隔が等しい、と計算しているという事実を使用することができます密度関数が想定していない離散データの確率のみである。 –

+0

経験的なCDFが欲しいですか? – Iterator

答えて

28

あなたのデータは離散しているように見えます。継続的なデータを扱う際の確率が間違っていることを期待しています。 density()は、実際の密度関数を近似する経験的な密度関数を与えます。正しい密度であることを証明するために、曲線の下の面積を計算します。

energy <- rnorm(100) 
dens <- density(energy) 
sum(dens$y)*diff(dens$x[1:2]) 
[1] 1.000952 

丸め誤差があるとします。曲線の下の領域は1になります。その結果、density()の結果はPDFの要件を満たします。

histprobability=TRUEオプションや機能density()(あるいはその両方)を使用し

例えば:あなたは本当に離散の確率が必要な場合は

hist(energy,probability=TRUE) 
lines(density(energy),col="red") 

enter image description here

を与えます変数を使用する場合は、

x <- sample(letters[1:4],1000,replace=TRUE) 
prop.table(table(x)) 
x 
    a  b  c  d 
0.244 0.262 0.275 0.219 

編集:イラストナイーブcount(x)/sum(count(x))が解決策ではない理由。実際には、ビンの値が1になり、カーブの下の領域が値をとるためではありません。そのためには、ビンの幅を増やす必要があります。 dnorm()を使ってPDFを計算できる正規分布を取る。次のコードは、正規分布を構築密度を計算し、そしてナイーブな溶液と比較:

x <- sort(rnorm(100,0,0.5)) 
h <- hist(x,plot=FALSE) 
dens1 <- h$counts/sum(h$counts) 
dens2 <- dnorm(x,0,0.5) 

hist(x,probability=TRUE,breaks="fd",ylim=c(0,1)) 
lines(h$mids,dens1,col="red") 
lines(x,dens2,col="darkgreen") 

が与える:

enter image description here


累積分布関数

でcase @Iteratorが正しく、累積distを構築するのはかなり簡単です密度からのリブレーション関数。 CDFはPDFの積分値です。離散値の場合、単純に確率の合計。

cdf <- cumsum(dens$y * diff(dens$x[1:2])) 
cdf <- cdf/max(cdf) # to correct for the rounding errors 
plot(dens$x,cdf,type="l") 

は与える::

enter image description here

+0

良い説明。 'type =" s ""を使うのは、経験的なcdf(密度推定ではなく)を示すより直感的な方法です。 –

関連する問題