Như @whuber đã chỉ ra, các phương pháp thống kê không hoạt động chính xác ở đây. Bạn cần suy ra sự phân phối từ các nguồn khác. Khi bạn biết phân phối, bạn có một bài tập giải phương trình phi tuyến tính. Biểu thị bằng hàm lượng tử của phân phối xác suất đã chọn của bạn với vectơ tham số . Những gì bạn có là hệ phương trình phi tuyến sau:θfθ
q0,05q0,5q0,95= f( 0.05 , θ )= f( 0,5 , θ )= f( 0,95 , θ )
trong đó là lượng tử của bạn. Bạn cần giải quyết hệ thống này để tìm . Bây giờ đối với thực tế cho bất kỳ phân phối 3 tham số nào, bạn sẽ tìm thấy các giá trị của các tham số thỏa mãn phương trình này. Đối với phân phối 2 tham số và 1 tham số, hệ thống này được xác định quá mức, do đó không có giải pháp chính xác. Trong trường hợp này, bạn có thể tìm kiếm một tập hợp các tham số giúp giảm thiểu sự khác biệt:θqθ
( q0,05- f( 0.05 , θ ) )2+ ( q0,5- f( 0,5 , θ ) )2+ ( q0,95- f( 0,95 , θ ) )2
Ở đây tôi đã chọn hàm bậc hai, nhưng bạn có thể chọn bất cứ thứ gì bạn muốn. Theo nhận xét của @whuber, bạn có thể gán trọng số, để các lượng tử quan trọng hơn có thể được gắn chính xác hơn.
Đối với bốn tham số trở lên, hệ thống không được xác định trước, do đó, vô số giải pháp tồn tại.
Dưới đây là một số mã R mẫu minh họa phương pháp này. Với mục đích trình diễn, tôi tạo ra các lượng tử từ phân phối Singh-Maddala từ gói VGAM . Phân phối này có 3 tham số và được sử dụng trong mô hình phân phối thu nhập.
q <- qsinmad(c(0.05,0.5,0.95),2,1,4)
plot(x<-seq(0,2,by=0.01), dsinmad(x, 2, 1, 4),type="l")
points(p<-c(0.05, 0.5, 0.95), dsinmad(p, 2, 1, 4))
Bây giờ hình thành hàm đánh giá hệ phương trình phi tuyến tính:
fn <- function(x,q) q-qsinmad(c(0.05, 0.5, 0.95), x[1], x[2], x[3])
Kiểm tra xem giá trị thực có thỏa mãn phương trình không:
> fn(c(2,1,4),q)
[1] 0 0 0
Để giải hệ phương trình phi tuyến tính, tôi sử dụng hàm nleqslv
từ gói nlqeslv .
> sol <- nleqslv(c(2.4,1.5,4.3),fn,q=q)
> sol$x
[1] 2.000000 1.000000 4.000001
Như chúng ta thấy, chúng ta có được giải pháp chính xác. Bây giờ chúng ta hãy cố gắng phù hợp với phân phối log-normal cho các lượng tử này. Đối với điều này, chúng tôi sẽ sử dụng optim
chức năng.
> ofn <- function(x,q)sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2)
> osol <- optim(c(1,1),ofn)
> osol$par
[1] -0.905049 0.586334
Bây giờ vẽ kết quả
plot(x,dlnorm(x,osol$par[1],osol$par[2]),type="l",col=2)
lines(x,dsinmad(x,2,1,4))
points(p,dsinmad(p,2,1,4))
Từ đó chúng ta thấy ngay rằng hàm số bậc hai không tốt lắm.
Hi vọng điêu nay co ich.