आर में संचयी वितरण की गणना कैसे करें?


23

मुझे डेटा नमूने के संचयी वितरण फ़ंक्शन की गणना करने की आवश्यकता है।

क्या R (H) के समान कुछ है जो संचयी घनत्व फ़ंक्शन को मापता है?

मेरे पास 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)

यहाँ छवि विवरण दर्ज करें

यदि आप चाहते हैं कि किसी वस्तु का मूल्यांकन CDR के विशिष्ट मूल्यों (बल्कि एक फ़ंक्शन ऑब्जेक्ट के बजाय) पर किया जाए, तो आप कर सकते हैं

> 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


हाँ, मुझे पता है, लेकिन यह कैसे संभव है कि ईक्विटी के मूल्यों का उपयोग किया जाए? यह मेरे लिए एक रहस्य है।
Emanuele

2
यदि आप चाहते हैं कि आप अपने मूल्य को xसीधे लिखें P(x)। ध्यान दें कि xएक वेक्टर हो सकता है (मेरे उत्तर के वाक्यों के अंतिम दोहे देखें।)
क्रिस टेलर

@ChrisTaylor सही शब्दावली आनुभविक संचयी वितरण फ़ंक्शन है घनत्व फ़ंक्शन नहीं।
माइकल आर। चेरिक

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.

अफसोस की बात है कि इस फ़ंक्शन का उपयोग बहुत तेज़ नहीं है। मुझे नहीं पता कि आर में एक फ़ंक्शन है जो यह करता है कि यह आपको एक फ़ंक्शन लौटाता है, जो अधिक कुशल होगा।


3
R[0,1]ecdf(c(-1,0,3,9))(8)0.75quantileR

1

मुझे हमेशा ecdf()थोड़ा भ्रमित करने वाला पाया गया। इसके अलावा मुझे लगता है कि यह केवल एकतरफा मामले में काम करता है। इसके बजाय अपने स्वयं के फ़ंक्शन को रोल करना समाप्त किया।

सबसे पहले data.table को इनस्टॉल करें । फिर मेरे पैकेज को स्थापित करें, mltools (या बस अपने आर वातावरण में अनुभवजन्य- LCDf () विधि की प्रतिलिपि बनाएँ ।)

फिर यह जितना आसान है

# 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' का सी.डी.एफ.

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

सीडीएफ के कॉलम 'x' और 'd' के d

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 और हिस्टोग्राम

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.