Tách hai quần thể khỏi mẫu


13

Tôi đang cố tách hai nhóm giá trị khỏi một tập dữ liệu. Tôi có thể giả định rằng một trong những quần thể được phân phối bình thường và ít nhất bằng một nửa kích thước của mẫu. Các giá trị của cái thứ hai đều thấp hơn hoặc cao hơn các giá trị từ cái thứ nhất (phân phối không xác định). Những gì tôi đang cố gắng làm là tìm ra các giới hạn trên và dưới sẽ bao gồm dân số phân phối bình thường từ những người khác.

Giả định của tôi cung cấp cho tôi điểm bắt đầu:

  • tất cả các điểm trong phạm vi liên mẫu của mẫu là từ dân số phân phối bình thường.

Tôi đang cố gắng kiểm tra các ngoại lệ lấy chúng từ phần còn lại của mẫu cho đến khi chúng không phù hợp với 3 st.dev của dân số phân phối bình thường. Điều này không lý tưởng, nhưng dường như tạo ra kết quả đủ hợp lý.

Là giả định của tôi thống kê âm thanh? Điều gì sẽ là một cách tốt hơn để đi về điều này?

Xin vui lòng sửa các thẻ một ai đó.


Bạn có thể cho rằng hai nhóm kia đến từ các bản phân phối Bình thường khác nhau không?
csgillespie

@cgillespie: đó là cùng một nhóm, chỉ với hai chế độ, tôi đoán vậy, và do đó tôi có lẽ không thể giả định điều này.
SilentGhost

1
Bạn có biết rằng các thành viên của nhóm thứ hai không được bao gồm trong nhóm đầu tiên hoặc bạn chỉ sẵn sàng gắn nhãn nhầm các thành viên đó thuộc nhóm thứ nhất?
Christian

Câu trả lời:


10

Nếu tôi hiểu chính xác, thì bạn có thể vừa một hỗn hợp của hai Định mức cho dữ liệu. Có rất nhiều gói R có sẵn để làm điều này. Ví dụ này sử dụng gói 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)

Điều này mang lại:

Hỗn hợp của hai tiêu chuẩn http://img294.imageshack.us/img294/4213/kernal.jpg

Gói này cũng chứa các phương thức tinh vi hơn - kiểm tra tài liệu.


Hình ảnh bạn đính kèm đã hết hạn.
naktinis

3
  1. Đối với dữ liệu trong phạm vi IQR, bạn nên sử dụng phân phối chuẩn bị cắt ngắn (ví dụ gói R gamlss.tr) để ước tính các tham số của phân phối này.
  2. Một cách tiếp cận khác là sử dụng các mô hình hỗn hợp với 2 hoặc 3 thành phần (phân phối). Bạn có thể điều chỉnh các mô hình như vậy bằng cách sử dụng gói gamlss.mx (phân phối từ gói gamlss.dist có thể được chỉ định cho từng thành phần của hỗn hợp).

2

Điều này giả định rằng bạn thậm chí không biết phân phối thứ hai có bình thường hay không; Về cơ bản tôi xử lý sự không chắc chắn này bằng cách chỉ tập trung vào phân phối bình thường. Điều này có thể hoặc không thể là phương pháp tốt nhất.

Nếu bạn có thể giả sử rằng hai quần thể tách biệt hoàn toàn (nghĩa là tất cả các giá trị từ phân phối A đều nhỏ hơn tất cả các giá trị từ phân phối B), thì một cách tiếp cận là sử dụng hàm tối ưu hóa () trong R để tìm kiếm điểm dừng mang lại các ước tính về giá trị trung bình và sd của phân phối bình thường làm cho dữ liệu có khả năng nhất:

#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)

Nếu bạn không thể giả định tách biệt hoàn toàn, thì tôi nghĩ bạn sẽ phải đảm nhận một số phân phối cho phân phối thứ hai và sau đó sử dụng mô hình hỗn hợp. Lưu ý rằng mô hình hỗn hợp sẽ không thực sự gắn nhãn các điểm dữ liệu riêng lẻ, nhưng sẽ cung cấp cho bạn tỷ lệ hỗn hợp và ước tính của các tham số của mỗi phân phối (ví dụ: trung bình, sd, v.v.).


optimizeTôi yêu cầu hai bản phân phối cạnh nhau như tôi hiểu. Trong trường hợp của tôi, cái này nằm trong cái kia, tức là, các giá trị từ quần thể thứ hai nằm ở cả hai phía của các giới hạn.
SilentGhost

1

Tôi ngạc nhiên không ai đề xuất giải pháp rõ ràng:

 #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)

Bây giờ để giải thích: ltsReghàm trong gói robustbase, khi được gọi với tùy chọn

nsamp="best"

mang lại trọng lượng MCD đơn biến (chính xác). (đây là các trọng số 0-1 vectơ n được lưu trữ trong $raw.weightsđối tượng. Thuật toán để xác định chúng là công cụ ước tính MCD (1)).

h= =(n+2)/2

hx(Tôi)Tôith
(x(1),...,x(h+1))(x(2),...,x(h+2))

n-h

(1) PJ Rousseeuw (1984). Trung bình nhỏ nhất của hồi quy bình phương, Tạp chí của Hiệp hội Thống kê Hoa Kỳ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.