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벡터가 될 수는 (내 대답의 문장의 마지막 몇을 참조하십시오.)
크리스 테일러 (Chris Taylor)

@ChrisTaylor 올바른 용어는 밀도 함수가 아닌 경험적 누적 분포 함수입니다.
Michael R. Chernick

1

필요한 것은 누적 분포 (샘플에서 x보다 << 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
R[0,1]ecdf(c(-1,0,3,9))(8)0.75quantileR

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.