정규 분포의 조합에서 나온 분위수


13

저는 연령대가 다른 어린이를위한 인체 치수의 분포 (어깨 폭과 같은)에 대한 정보를 가지고 있습니다. 각 연령과 치수에 대해 평균 표준 편차가 있습니다. (또한 8 개의 Quantile이 있지만 원하는 것을 얻을 수 없다고 생각합니다.)

각 차원마다 길이 분포의 특정 Quantile을 추정하고 싶습니다. 각 치수가 정규 분포를 따른다고 가정하면 평균 및 표준 편차를 사용하여이를 수행 할 수 있습니다. 분포의 특정 Quantile과 관련된 값을 얻는 데 사용할 수있는 예쁜 공식이 있습니까?

그 반대의 경우는 매우 쉽습니다. 특정 값의 경우 각 정규 분포 (나이)에 대한 값의 오른쪽 영역을 가져옵니다. 결과를 합산하고 분포 수로 나눕니다.

업데이트 : 다음은 그래픽 형식의 동일한 질문입니다. 각 유색 분포가 정규 분포를 따른다고 가정합니다. 그래픽 형식의 동일한 질문

또한 분명히 다른 길이의 무리를 시도하고 내 정밀도를 위해 원하는 Quantile에 충분히 가까운 길이를 얻을 때까지 계속 변경 할 수 있습니다. 이보다 더 좋은 방법이 있는지 궁금합니다. 그리고 이것이 올바른 접근법이라면, 그 이름이 있습니까?


3
정규 분포 혼합 의 Quantile을 계산하는 간단한 공식이 있는지 묻고 있습니까? 이 응용 프로그램에서는 연령별 매개 변수를 기반으로 연령에 관계없이 어깨 범위의 Quantile (예 :)을 요구합니다 . 이것이 올바른 해석입니까?
whuber

답변:


16

불행하게도, 표준 법선 (정규는 위치-규모 패밀리이기 때문에 다른 모든 법칙을 결정할 수 있음) Quantile 함수는 닫힌 형태 (즉, '예쁜 공식')를 허용하지 않습니다. 닫힌 형태에 가장 가까운 것은 표준 정규 양자 함수가 미분 방정식을 만족하는 함수 입니다.w

d2wdp2=w(dwdp)2

초기 조건 및 입니다. 대부분의 컴퓨팅 환경에는 정상 Quantile 함수를 수치 적으로 계산하는 함수가 있습니다. R에서는 다음을 입력합니다.w(1/2)=0w(1/2)=2π

qnorm(p, mean=mu, sd=sigma)

분포 의 번째 분위수 를 구합니다 .pN(μ,σ2)


편집 : 문제에 대한 수정 된 이해로 데이터는 법선 혼합에서 생성되므로 관찰 된 데이터의 밀도는 다음과 같습니다.

p(x)=iwipi(x)

여기서 이고 각 는 평균 및 표준 편차 정규 밀도입니다 . 관찰 된 데이터의 CDF는 다음과 같다.iwi=1pi(x)μiσi

F(y)=yiwipi(x)dx=iwiypi(x)=iwiFi(y)

여기서 는 평균 및 표준 편차 정규 CDF입니다 . 적분이 유한하기 때문에 적분과 합산을 서로 바꿀 수 있습니다. 이 CDF는 컴퓨터에서 계산하기에 충분하고 연속적이므로 Quantile 함수라고도 하는 역 CDF 은 라인 검색을 통해 계산할 수 있습니다. 구성 분포의 Quantile의 함수로서 법선 혼합의 Quantile 함수에 대한 간단한 공식이 없으므로이 옵션을 기본값으로 사용합니다.μ i σ i F - 1Fi(x)μiσiF1

다음 R 코드 는 줄 검색을 위해 이분법을 사용하여 을 수치 적으로 계산 합니다. F_inv () 함수는 Quantile 함수입니다. 각 및 풀어야 할 Quantile 포함하는 벡터를 제공해야합니다 . w i , μ i , σ i pF1wi,μi,σip

# evaluate the function at the point x, where the components 
# of the mixture have weights w, means stored in u, and std deviations
# stored in s - all must have the same length.
F = function(x,w,u,s) sum( w*pnorm(x,mean=u,sd=s) )

# provide an initial bracket for the quantile. default is c(-1000,1000). 
F_inv = function(p,w,u,s,br=c(-1000,1000))
{
   G = function(x) F(x,w,u,s) - p
   return( uniroot(G,br)$root ) 
}

#test 
# data is 50% N(0,1), 25% N(2,1), 20% N(5,1), 5% N(10,1)
X = c(rnorm(5000), rnorm(2500,mean=2,sd=1),rnorm(2000,mean=5,sd=1),rnorm(500,mean=10,sd=1))
quantile(X,.95)
    95% 
7.69205 
F_inv(.95,c(.5,.25,.2,.05),c(0,2,5,10),c(1,1,1,1))
[1] 7.745526

# data is 20% N(-5,1), 45% N(5,1), 30% N(10,1), 5% N(15,1)
X = c(rnorm(5000,mean=-5,sd=1), rnorm(2500,mean=5,sd=1),
      rnorm(2000,mean=10,sd=1), rnorm(500, mean=15,sd=1))
quantile(X,.95)
     95% 
12.69563 
F_inv(.95,c(.2,.45,.3,.05),c(-5,5,10,15),c(1,1,1,1))
[1] 12.81730

2
질문의 마지막 단락은 다른 것이 요구되고 있음을 암시합니다. 설명을 요청했습니다.
whuber

whuber의 직감이 맞습니다. 질문을 덜 혼란스럽게 만들기 위해 그림을 추가했습니다.
Thomas Levine

1
이 문제를 해결하기위한 R 패키지 지금이 참조 stats.stackexchange.com/questions/390931/...
크리스토프 Hanck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.