표본에서 두 모집단 분리


13

단일 데이터 세트에서 두 개의 값 그룹을 분리하려고합니다. 모집단 중 하나가 정규 분포이고 표본 크기의 절반 이상이라고 가정 할 수 있습니다. 두 번째 값은 첫 번째 값보다 낮거나 높습니다 (배포를 알 수 없음). 내가하려는 것은 정상적으로 분포 된 인구를 다른 사람들과 묶는 상한과 하한을 찾는 것입니다.

내 가정은 시작점을 제공합니다.

  • 표본의 사 분위수 범위 내의 모든 점은 정규 분포 모집단에서 나옵니다.

정규 분포의 모집단의 3 st.dev에 맞지 않을 때까지 나머지 표본에서 추출하는 특이 치에 대해 테스트하려고합니다. 어느 것이 이상적이지는 않지만 합리적인 결과를 산출하는 것 같습니다.

내 가정이 통계적으로 양호합니까? 이것에 대해 더 좋은 방법은 무엇입니까?

추신 : 누군가 태그를 수정하십시오.


다른 두 그룹이 서로 다른 정규 분포에 있다고 가정 할 수 있습니까?
csgillespie

@ cgillespie : 두 그룹의 동일한 그룹이므로 추측 할 수 없으므로 아마도 이것을 추측 할 수 없습니다.
SilentGhost

1
두 번째 그룹의 구성원이 첫 번째 그룹에 포함되지 않았거나 해당 구성원을 첫 번째 그룹에 속하는 것으로 잘못 표시하려고한다고 알고 있습니까?
Christian

답변:


10

올바르게 이해하면 두 개의 법선을 혼합하여 데이터에 맞출 수 있습니다. 이를 위해 사용할 수있는 많은 R 패키지가 있습니다. 이 예제는 mixtools 패키지 를 사용합니다 :

#Taken from the documentation
library(mixtools)
data(faithful)
attach(faithful)

#Fit two Normals
wait1 = normalmixEM(waiting, lambda = 0.5)
plot(wait1, density=TRUE, loglik=FALSE)

이것은 다음을 제공합니다.

두 법선의 혼합 http://img294.imageshack.us/img294/4213/kernal.jpg

패키지에는보다 정교한 방법이 포함되어 있습니다-설명서를 확인하십시오.


1
첨부 한 이미지가 만료되었습니다.
naktinis

3
  1. IQR 범위의 데이터의 경우 잘린 정규 분포 (예 : R 패키지 gamlss.tr)를 사용하여이 분포의 모수를 추정해야합니다.
  2. 다른 접근법은 2 개 또는 3 개의 성분 (분포)을 가진 혼합 모형을 사용하는 것입니다. gamlss.mx 패키지를 사용하여 이러한 모델을 맞출 수 있습니다 (패키지 gamlss.dist의 배포는 각 혼합물 구성 요소에 대해 지정할 수 있음).

2

이것은 두 번째 분포가 정상인지 아닌지조차 모른다고 가정합니다. 저는 기본적으로 정규 분포에만 초점을 두어이 불확실성을 처리합니다. 이것이 최선의 방법 일 수도 있고 아닐 수도 있습니다.

두 모집단이 완전히 분리되었다고 가정 할 수있는 경우 (즉, 분포 A의 모든 값이 분포 B의 모든 값보다 작음) R의 optimize () 함수를 사용하여 중단 점을 검색하는 방법이 있습니다. 데이터를 가장 가능성있게 만드는 정규 분포의 평균과 sd를 추정합니다.

#generate completely separated data
a = rnorm(100)
b = rnorm(100,10)
while(!all(a<b)){
    a = rnorm(100)
    b = rnorm(100,10)
}

#create a mix
mix = c(a,b)

#"forget" the original distributions
rm(a)
rm(b)

#try to find the break point between the distributions
break_point = optimize(
    f = function(x){
        data_from_a = mix[mix<x]
        likelihood = dnorm(data_from_a,mean(data_from_a),sd(data_from_a))
        SLL = sum(log(likelihood))
        return(SLL)
    }
    , interval = c(sort(mix)[2],max(mix))
    , maximum = TRUE
)$maximum

#label the data
labelled_mix = data.frame(
    x = mix
    , source = ifelse(mix<break_point,'A','B')
)
print(labelled_mix)

완전 분리를 가정 할 수 없다면 두 번째 분포에 대한 분포를 가정 한 다음 혼합 모델링을 사용해야한다고 생각합니다. 혼합 모델링은 실제로 개별 데이터 포인트에 레이블을 지정하지 않지만 혼합 비율과 각 분포의 모수 (예 : 평균, sd 등)의 추정치를 제공합니다.


optimize내가 이해하는 것처럼 두 배포판이 나란히 있어야합니다. 필자의 경우 하나는 다른 쪽 안에 있습니다. 즉 두 번째 모집단의 값은 한계의 양쪽에 있습니다.
SilentGhost

1

아무도 명백한 해결책을 제안하지 않은 것에 놀랐습니다.

 #generate completely separated data
library(robustbase)
set.seed(123)  
x<-rnorm(200)
x[1:40]<-x[1:40]+10  
x[41:80]<-x[41:80]-10
Rob<-ltsReg(x~1,nsamp="best")
#all the good guys
which(Rob$raw.weights==1)

이제 설명을 위해 : 옵션과 함께 호출 될 때 ltsRegpackage 의 함수robustbase

nsamp="best"

일 변량 (정확한) MCD 가중치를 산출합니다. (이것은 $raw.weights객체에 저장된 n- 벡터 0-1 가중치 입니다.이를 식별하는 알고리즘은 MCD 추정기입니다 (1)).

간단히 말해서,이 가중치는 가장 집중된 관측치 의 부분 집합에 대해 1입니다 .h=(n+2)/2

차원에서, 그 다음의 연속하는 서브 세트의 측정치 산출 모든 관측을 정렬하여 시작 나타내는 : 관측 정렬 관측 벡터의 엔트리는, 그것의 측정 값을 연산을 ( 예를 들어 다음에 등등 ... )는 더 작은 측정 값을 유지합니다.hx(i)ith
(x(1),...,x(h+1))(x(2),...,x(h+2))

이 알고리즘은 관심 그룹의 수가 원래 표본의 대부분을 차지하고 대칭 분포를 가지고 있다고 가정합니다 (그러나 나머지 관측 의 분포에 대한 가설은 없습니다 ).nh

(1) PJ Rousseeuw (1984). 최소 제곱 회귀 분석, Journal of the American Statistical Association.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.