R의 커널 밀도 추정에서 "pdf"영역


15

커널 밀도 추정을 위해 R 의 ' density '기능 을 사용하려고합니다 . 곡선 아래 면적이 반드시 1 인 것처럼 보이지 않기 때문에 결과를 해석하고 다양한 데이터 세트를 비교하는 데 약간의 어려움이 있습니다. 확률 밀도 함수 (pdf) 경우 입니다. 커널 밀도 추정치가 pdf를보고한다고 가정합니다. 내가 사용하고 integrate.xy 에서 sfsmisc 곡선 아래의 면적을 추정 할 수 있습니다.ϕ(엑스)ϕ(엑스)엑스=1

> # generate some data
> xx<-rnorm(10000)
> # get density
> xy <- density(xx)
> # plot it
> plot(xy)

밀도의 줄거리

> # load the library
> library(sfsmisc)
> integrate.xy(xy$x,xy$y)
[1] 1.000978
> # fair enough, area close to 1
> # use another bw
> xy <- density(xx,bw=.001)
> plot(xy)

bw = .001 인 밀도

> integrate.xy(xy$x,xy$y)
[1] 6.518703
> xy <- density(xx,bw=1)
> integrate.xy(xy$x,xy$y)
[1] 1.000977
> plot(xy)

bw = 1 인 밀도

> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)

bw = 1e-6의 밀도

곡선 아래 면적이 항상 1이 아니어야합니까? 작은 대역폭이 문제인 것 같지만 때로는 꼬리에 세부 사항 등을 표시하고 작은 대역폭이 필요합니다.

업데이트 / 답변 :

통합 점의 수가 증가하면 문제가 줄어드는 것처럼 볼록 영역의 과대 평가에 대한 아래의 대답은 올바른 것 같습니다 ( 점 이상을 사용하려고 시도하지 않았습니다 ).220

> xy <- density(xx,n=2^15,bw=.001)
> plot(xy)

샘플링 할 포인트 수가 많은 밀도

> integrate.xy(xy$x,xy$y)
[1] 1.000015
> xy <- density(xx,n=2^20,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 2.812398


3
이것은 밀도 ()의 부동 소수점 제한처럼 보입니다 .1e-6의 대역폭을 사용할 때 이론적으로 총 질량 1/10000의 10,000 스파이크 모음을 만듭니다. 이러한 스파이크는 갭을 적절히 특성화하지 않고 주로 피크로 표시됩니다. 밀도 ()를 한계를 넘어서고 있습니다.
whuber

@whuber는 부동 소수점 제한에 의해 부동 소수점을 사용하는 것이 double을 사용하는 것보다 오류를 과대 평가하는 것으로 정밀도의 한계를 의미합니까? 나는 그것이 어떻게 일어날 지 알지 않지만 몇 가지 증거를보고 싶다고 생각합니다.
highBandWidth


1

@ Anony-Mousse, 그렇습니다. 이것이 바로이 질문입니다. 왜 1로 평가되지 않습니까?
highBandWidth

답변:


9

사다리꼴 규칙 integrate.xy()사용 에 대해 생각하십시오 . 정규 분포의 경우 밀도가 오목한 (따라서 선형 보간이 실제 밀도보다 낮음) 구간 (-1,1)에서 곡선 아래 면적 을 과소 평가 하고 다른 위치 (선형 보간이 진행됨)로 과대 평가 합니다 진정한 밀도 위에). 후자의 영역이 더 크므로 (원하는 경우 Lesbegue 측정에서) 사다리꼴 규칙은 적분을 과대 평가하는 경향이 있습니다. 이제 더 작은 대역폭으로 이동하면 거의 모든 추정치가 데이터 단위에 해당하는 많은 좁은 스파이크와 그 사이의 골짜기가있는 부분적으로 볼록합니다. 그것이 사다리꼴 규칙이 특히 나빠지는 곳입니다.


즉, 우리는 손으로 울퉁불퉁 한 방식으로 봉우리를 "오버 샘플링"하고 밸리를 "언더 샘플링"한다는 의미입니다. 시각화는 사다리꼴 규칙 (샘플 전체의 선형 보간)도 따르므로 너무 작은 커널 대역폭도 시각화에 좋지 않은 것 같습니다. 또한 밀도를 계산할 때 더 많은 수의 포인트를 얻을 수 있다면 문제가 줄어 듭니다.
highBandWidth

1
이 설명에는 물이 들어 있지 않습니다. 문제는 밀도가 부적절하게 불연속 화되어 사다리꼴 규칙이 심하게 분해되지 않는다는 것입니다. 밀도 ()가 올바른 표현을 생성하지 않기 때문에 통합 ()은 정답을 얻는 데 무력합니다. 이를 확인하려면 xy $ x를 검사하십시오. 10,000 개의 좁은 스파이크를 나타내는 512 개의 값만 있습니다!
whuber

@ whuber, 그것이 대답했습니다. 요점은 한정된 수의 샘플에 사다리꼴 규칙을 사용해야하며, 커널에 따라 연속 축의 실제 밀도와 비교하여 면적을 과대 평가합니다. 질문 끝에 내 업데이트가 확장됩니다.
highBandWidth

1
@ 높은 아니요; 사다리꼴 규칙이 잘 작동합니다. 문제는 그것이 정수의 잘못된 이산화로 작동한다는 것입니다. 밀도 배열에 10,000 개의 데이터 포인트가 있고 512 개의 값만있는 경우 "데이터 포인트에 해당하는 많은 좁은 스파이크"를 가질 수 없습니다!
whuber

1
이 그래프를 보면 이제 문제가와 함께있는 density것이 아니라고 생각합니다 integrate.xy. N으로 = 10000 및 BW = 1E6을, 당신은 것 가지고 1E6에 대한 각 치아의 높이 빗를 참조하고, 대신 0 주위 밀도있는 치아, 당신은 여전히 인식 종 모양의 곡선을 참조하십시오. 그래서 density당신을 속이는 것이거나 최소한 작은 대역폭으로 다르게 n사용해야합니다 : 기본값이 아닌 (데이터 범위) / (bw)이어야합니다 n=512. 통합자는 density불행한 우연의 일치로 돌아 오는 이 거대한 가치 중 하나를 선택해야합니다 .
StasK

-1

괜찮습니다. 이동 및 스케일링을 수정할 수 있습니다. 밀도가 음이 아닌 가장 작은 수를 더한 다음 면적이 단일이되도록 상수에 곱하십시오. 이것은 쉬운 방법입니다.

2[ϕ(엑스)]+


2
공지 사항 질문은 오히려 켜져 있는지 density 기능은 "적절한"밀도를 생성하지 않는 일에 통합하고 -보다는 그것을 해결하는 방법에.
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.