Làm thế nào để biết liệu dữ liệu của tôi có phù hợp với phân phối Pareto không?


10

Tôi có một mẫu là một vectơ với 220 số. Đây là một liên kết đến một biểu đồ dữ liệu của tôi. . Và tôi muốn kiểm tra xem dữ liệu của mình có phù hợp với phân phối Pareto hay không, nhưng tôi không muốn xem các lô QQ với phân phối đó, nhưng tôi cần một câu trả lời chính xác với giá trị p trong R, chẳng hạn như kiểm tra Anderson-Darling về tính quy tắc ( ad.test) . Làm thế nào tôi có thể làm điều đó? Hãy càng cụ thể càng tốt.


1
Kết quả kiểm tra thống kê sẽ không cho bạn biết rằng dữ liệu của bạn có phân phối Pareto . Trên thực tế, bạn có thể khá chắc chắn rằng nếu đó là dữ liệu thực, họ không có phân phối Pareto. Tất cả bài kiểm tra sẽ cho bạn thấy liệu bạn có đủ dữ liệu để nhận độ lệch so với Pareto mà bạn có hay không. Đó là, nếu nó từ chối tất cả những gì nó nói là 'vâng, cỡ mẫu đủ lớn để cho bạn biết những gì bạn đã biết'. Tại sao bạn sẽ thực hiện một bài tập như vậy, một bài tập không thể trả lời câu hỏi thực tế bạn có?
Glen_b -Reinstate Monica

Có phải câu hỏi của bạn thực sự không có gì khác hơn 'tôi viết những dòng mã nào để tạo chương trình R làm thủ tục X'? Sau đó, nó lạc đề ở đây. Nó có thể đủ điều kiện như một câu hỏi lập trình. Nếu có một khía cạnh thống kê cho câu hỏi của bạn (như 'điều này có ý nghĩa gì không?') Thì bạn nên làm rõ và nhấn mạnh những khía cạnh của câu hỏi đó
Glen_b -Reinstate Monica

1
Bây giờ đến bài kiểm tra Anderson-Darling (hoặc, về vấn đề đó, Kolmogorov-Smirnov mà @Zen đã đề xuất ở trên). Đó là những thử nghiệm cho các bản phân phối hoàn toàn được chỉ định . Đó là, để các bài kiểm tra có các thuộc tính mong muốn, bạn phải chỉ định một tiên nghiệm ( KHÔNG ước tính ) tất cả các tham số. Vì vậy, bạn không thể sử dụng một trong số chúng cho bài tập này vì bạn không có các tham số được chỉ định trước. (Có lẽ bạn đang làm điều này theo đề nghị của người khác. Rất khó để giải thích những quan niệm sai lầm cho ai đó thông qua một người trung gian.)
Glen_b -Reinstate Monica

Bạn đang làm thử nghiệm này để làm gì? ví dụ: hành động nào sẽ thay đổi tùy thuộc vào việc bạn từ chối hay không từ chối?
Glen_b -Reinstate Monica

Bạn nên luôn luôn nhìn vào một âm mưu QQ, bất kể động cơ của bạn. Và bạn không nên tôn sùng một giá trị P "chính xác". Một thử nghiệm khác sẽ cung cấp cho bạn một giá trị P "chính xác" khác.
Nick Cox

Câu trả lời:


12

(PS) Trước hết tôi nghĩ Glen_b đã đúng trong các nhận xét trên của mình về tính hữu ích của thử nghiệm như vậy: dữ liệu thực chắc chắn không được phân phối chính xác Pareto và đối với hầu hết các ứng dụng thực tế, câu hỏi sẽ là "xấp xỉ Pareto tốt như thế nào?" - và cốt truyện QQ là một cách tốt để thể hiện chất lượng của một xấp xỉ như vậy.

pks.test

Dưới đây là một vài dòng mã R.

Đầu tiên xác định các chức năng cơ bản để đối phó với các bản phân phối Pareto.

# distribution, cdf, quantile and random functions for Pareto distributions
dpareto <- function(x, xm, alpha) ifelse(x > xm , alpha*xm**alpha/(x**(alpha+1)), 0)
ppareto <- function(q, xm, alpha) ifelse(q > xm , 1 - (xm/q)**alpha, 0 )
qpareto <- function(p, xm, alpha) ifelse(p < 0 | p > 1, NaN, xm*(1-p)**(-1/alpha))
rpareto <- function(n, xm, alpha) qpareto(runif(n), xm, alpha)

Hàm sau tính toán MLE của các tham số (biện minh trong Wikipedia ).

pareto.mle <- function(x)
{
  xm <- min(x)
  alpha <- length(x)/(sum(log(x))-length(x)*log(xm))
  return( list(xm = xm, alpha = alpha))
}

p

pareto.test <- function(x, B = 1e3)
{
  a <- pareto.mle(x)

  # KS statistic
  D <- ks.test(x, function(q) ppareto(q, a$xm, a$alpha))$statistic

  # estimating p value with parametric bootstrap
  B <- 1e5
  n <- length(x)
  emp.D <- numeric(B)
  for(b in 1:B)
  {
    xx <- rpareto(n, a$xm, a$alpha);
    aa <- pareto.mle(xx)
    emp.D[b] <- ks.test(xx, function(q) ppareto(q, aa$xm, aa$alpha))$statistic
  }

  return(list(xm = a$xm, alpha = a$alpha, D = D, p = sum(emp.D > D)/B))
}

Bây giờ, ví dụ, một mẫu đến từ phân phối Pareto:

> # generating 100 values from Pareto distribution
> x <- rpareto(100, 0.5, 2)
> pareto.test(x)
$xm
[1] 0.5007593

$alpha
[1] 2.080203

$D
         D 
0.06020594 

$p
[1] 0.69787

χ2(2)

> # generating 100 values from chi square distribution
> x <- rchisq(100, df=2)
> pareto.test(x)
$xm
[1] 0.01015107

$alpha
[1] 0.2116619

$D
        D 
0.4002694 

$p
[1] 0

Lưu ý rằng tôi không cho rằng thử nghiệm này không thiên vị: khi mẫu nhỏ, một số sai lệch có thể tồn tại. Bootstrap tham số không tính đến độ không đảm bảo của ước lượng tham số (nghĩ xem điều gì sẽ xảy ra khi sử dụng chiến lược này để kiểm tra một cách ngây thơ nếu giá trị trung bình của một biến số bình thường với phương sai không xác định bằng 0).

PS Wikipedia nói một vài từ về điều này. Dưới đây là hai câu hỏi khác mà một chiến lược tương tự đã được đề xuất: Mức độ phù hợp của thử nghiệm đối với hỗn hợp , độ tốt của thử nghiệm độ phù hợp đối với phân phối gamma .


3
Khi bạn điều chỉnh phân phối thống kê kiểm tra để ước tính các tham số theo cách này, đó không phải là kiểm tra KS (mặc dù dựa trên thống kê của KS) - đó là một loại thử nghiệm Lilliefors cụ thể . Điều này không còn là không tham số, nhưng người ta có thể xây dựng một thông qua mô phỏng cho bất kỳ phân phối nhất định. Lilliefors đã làm điều này đặc biệt cho bình thường và theo cấp số nhân ... vào những năm 1960.
Glen_b -Reinstate Monica

Cảm ơn vì nhận xét này @Glen_b Tôi không biết điều đó.
Elvis

Không vấn đề gì; nó không thay đổi gì về nội dung của những gì bạn đang làm (cũng tốt như vậy), chỉ những gì nó nên được gọi.
Glen_b -Reinstate Monica

@Glen_b Tôi đã thực hiện một số thay đổi đáng kể trong câu trả lời của mình, cảm ơn một lần nữa!
Elvis
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.