Rの累積分布を計算する方法は?


23

データサンプルの累積分布関数を計算する必要があります。

累積密度関数を測定するRのhist()に似たものはありますか?

私はecdf()を試しましたが、ロジックを理解できません。

回答:


32

ecdfこの関数は返すデータサンプルに適用される機能経験的累積分布関数を表しています。例えば:

> X = rnorm(100) # X is a sample of 100 normally distributed random variables
> P = ecdf(X)    # P is a function giving the empirical CDF of X
> P(0.0)         # This returns the empirical CDF at zero (should be close to 0.5)
[1] 0.52
> plot(P)        # Draws a plot of the empirical CDF (see below)

ここに画像の説明を入力してください

(関数オブジェクトとしてではなく)特定の値で評価された経験的CDFを表すオブジェクトが必要な場合は、次のようにします。

> z = seq(-3, 3, by=0.01) # The values at which we want to evaluate the empirical CDF
> p = P(z)                # p now stores the empirical CDF evaluated at the values in z

pなどの情報のほとんど同じ量で含まれているP(そしておそらくそれはあまり含まれている)順番になどの情報を同じ量が含まれていますX


はい、知っていますが、ecdfの値にアクセスする方法はありますか?これは私にとって謎です。
-emanuele

2
もしあなたがその価値をx望むなら、単に書いてくださいP(x)。それxがベクトルになる可能性があることに注意してください(私の答えの最後の2、3の文を参照してください)
クリステイラー

@ChrisTaylor正しい用語は、密度関数ではなく経験的累積分布関数です。
マイケルR.チャーニック

1

必要と思われるのは、累積分布を取得するためです(サンプルでxよりも小さい値を取得する確率)。ecdfは関数を返しますが、プロット用に作成されているように見えるため、その関数の引数、それが階段であれば、トレッドのインデックスになります。

これを使用できます:

acumulated.distrib= function(sample,x){
    minors= 0
    for(n in sample){
        if(n<=x){
            minors= minors+1
        }
    }
    return (minors/length(sample))
}

mysample = rnorm(100)
acumulated.distrib(mysample,1.21) #1.21 or any other value you want.

悲しいことに、この関数の使用は非常に高速ではありません。Rに関数を返す関数があるかどうかはわかりませんが、より効率的です。


3
ECDFとその逆を混同しているようです。 R実際、ECDFを計算します。その引数は確率変数の潜在的な値であり、区間値を返します。これはすぐに確認されます。たとえば、を返します。ECDFの一般化された逆関数は、in によって実装される分位数関数です。[01]ecdf(c(-1,0,3,9))(8)0.75quantileR
whuber

1

私はいつもecdf()少し混乱することがわかった。さらに、単変量の場合にのみ機能すると思います。代わりに、このために独自の機能を展開しました。

最初にdata.tableをインストールします。次に、パッケージmltoolsをインストールします(またはempirical_cdf()メソッドをR環境にコピーします)。

それはそれと同じくらい簡単です

# load packages
library(data.table)
library(mltools)

# Make some data
dt <- data.table(x=c(0.3, 1.3, 1.4, 3.6), y=c(1.2, 1.2, 3.8, 3.9))
dt
     x   y
1: 0.3 1.2
2: 1.3 1.2
3: 1.4 3.8
4: 3.6 3.9

ベクトルのCDF

empirical_cdf(dt$x, ubounds=seq(1, 4, by=1.0))
   UpperBound N.cum  CDF
1:          1     1 0.25
2:          2     3 0.75
3:          3     3 0.75
4:          4     4 1.00

dtの列 'x'のCDF

empirical_cdf(dt, ubounds=list(x=seq(1, 4, by=1.0)))
   x N.cum  CDF
1: 1     1 0.25
2: 2     3 0.75
3: 3     3 0.75
4: 4     4 1.00

dtの列「x」および「y」のCDF

empirical_cdf(dt, ubounds=list(x=seq(1, 4, by=1.0), y=seq(1, 4, by=1.0)))
    x y N.cum  CDF
 1: 1 1     0 0.00
 2: 1 2     1 0.25
 3: 1 3     1 0.25
 4: 1 4     1 0.25
 5: 2 1     0 0.00
 6: 2 2     2 0.50
 7: 2 3     2 0.50
 8: 2 4     3 0.75
 9: 3 1     0 0.00
10: 3 2     2 0.50
11: 3 3     2 0.50
12: 3 4     3 0.75
13: 4 1     0 0.00
14: 4 2     2 0.50
15: 4 3     2 0.50
16: 4 4     4 1.00

1

友達、このブログのコードを読むことができます。

sample.data = read.table ('data.txt', header = TRUE, sep = "\t")
cdf <- ggplot (data=sample.data, aes(x=Delay, group =Type, color = Type)) + stat_ecdf()
cdf

詳細については、次のリンクを参照してください。

r cdfおよびヒストグラム

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.