Tôi đã nhận được dữ liệu và vẽ sơ đồ phân phối dữ liệu và sử dụng hàm qqnorm, nhưng dường như không tuân theo phân phối bình thường, vậy tôi nên sử dụng phân phối nào để loại bỏ dữ liệu?
Hàm phân phối tích lũy theo kinh nghiệm
Tôi đã nhận được dữ liệu và vẽ sơ đồ phân phối dữ liệu và sử dụng hàm qqnorm, nhưng dường như không tuân theo phân phối bình thường, vậy tôi nên sử dụng phân phối nào để loại bỏ dữ liệu?
Hàm phân phối tích lũy theo kinh nghiệm
Câu trả lời:
Tôi đề nghị bạn cho Lambert W x F đuôi nặng hoặc phân phối Lambert W x F thử nghiệm (từ chối trách nhiệm: Tôi là tác giả). Trong R chúng được thực hiện trong gói LambertW .
Họ nảy sinh từ một tham số, biến đổi phi tuyến tính của một biến ngẫu nhiên (RV) , để một (lệch) phiên bản nặng đuôi . Đối với là Gaussian, Lambert W x F đuôi nặng giảm phân phối của Tukey . (Ở đây tôi sẽ phác thảo phiên bản đuôi nặng, cái bị lệch là tương tự.)Y ∼ Lambert W × F F h
Chúng có một tham số ( cho Lambert W x F) bị lệch điều chỉnh mức độ nặng của đuôi (độ lệch). Tùy chọn, bạn cũng có thể chọn các đuôi nặng trái và phải khác nhau để đạt được đuôi nặng và không đối xứng. Nó biến đổi một chuẩn thành Lambert W Gaussian theo gamma ∈ R U ~ N ( 0 , 1 ) × Z Z = U exp ( δ
Nếu có đuôi nặng hơn ; cho , .Z U δ = 0 Z ≡ U
Nếu bạn không muốn sử dụng Gaussian làm đường cơ sở, bạn có thể tạo các phiên bản Lambert W khác của bản phân phối yêu thích của mình, ví dụ: t, thống nhất, gamma, hàm mũ, beta, ... Tuy nhiên, đối với tập dữ liệu của bạn nặng gấp đôi đuôi Lambert W x Gaussian (hoặc một phân phối Lambert W xt) dường như là một điểm khởi đầu tốt.
library(LambertW)
set.seed(10)
### Set parameters ####
# skew Lambert W x t distribution with
# (location, scale, df) = (0,1,3) and positive skew parameter gamma = 0.1
theta.st <- list(beta = c(0, 1, 3), gamma = 0.1)
# double heavy-tail Lambert W x Gaussian
# with (mu, sigma) = (0,1) and left delta=0.2; right delta = 0.4 (-> heavier on the right)
theta.hh <- list(beta = c(0, 1), delta = c(0.2, 0.4))
### Draw random sample ####
# skewed Lambert W x t
yy <- rLambertW(n=1000, distname="t", theta = theta.st)
# double heavy-tail Lambert W x Gaussian (= Tukey's hh)
zz =<- rLambertW(n=1000, distname = "normal", theta = theta.hh)
### Plot ecdf and qq-plot ####
op <- par(no.readonly=TRUE)
par(mfrow=c(2,2), mar=c(3,3,2,1))
plot(ecdf(yy))
qqnorm(yy); qqline(yy)
plot(ecdf(zz))
qqnorm(zz); qqline(zz)
par(op)
Trong thực tế, tất nhiên, bạn phải ước tính , trong đó là tham số của phân phối đầu vào của bạn (ví dụ: cho Gaussian hoặc cho bản phân phối ; xem giấy để biết chi tiết):β β = ( μ , σ ) β = ( c , s , ν ) t
### Parameter estimation ####
mod.Lst <- MLE_LambertW(yy, distname="t", type="s")
mod.Lhh <- MLE_LambertW(zz, distname="normal", type="hh")
layout(matrix(1:2, ncol = 2))
plot(mod.Lst)
plot(mod.Lhh)
Vì thế hệ đuôi nặng này dựa trên sự biến đổi tính toán của RV / dữ liệu, bạn có thể xóa đuôi nặng khỏi dữ liệu và kiểm tra xem bây giờ chúng có tốt không , tức là nếu chúng là Gaussian (và kiểm tra nó bằng các phép thử Normality).
### Test goodness of fit ####
## test if 'symmetrized' data follows a Gaussian
xx <- get_input(mod.Lhh)
normfit(xx)
Điều này làm việc khá tốt cho các tập dữ liệu mô phỏng. Tôi đề nghị bạn hãy dùng thử và xem nếu bạn cũng có thể Gaussianize()
dữ liệu của mình .
Tuy nhiên, như @whuber đã chỉ ra, bimodality có thể là một vấn đề ở đây. Vì vậy, có thể bạn muốn kiểm tra dữ liệu đã chuyển đổi (không có đuôi nặng) những gì đang xảy ra với tính chất lưỡng tính này và do đó cung cấp cho bạn thông tin chi tiết về cách mô hình hóa dữ liệu (bản gốc) của bạn.
Điều này trông giống như một phân phối bất đối xứng có đuôi dài hơn, theo cả hai hướng, so với phân phối bình thường.
Bạn có thể thấy độ dài của đuôi vì các điểm quan sát cực hơn so với các điểm được mong đợi theo phân phối bình thường, ở cả bên trái và bên phải (tức là chúng nằm bên dưới và bên trên đường kẻ, tương ứng).
Bạn có thể thấy sự bất đối xứng bởi vì, ở phần đuôi bên phải, mức độ mà các điểm cực trị hơn so với những gì được mong đợi trong phân phối bình thường lớn hơn ở phần đuôi bên trái.
Tôi không thể nghĩ ra bất kỳ bản phân phối "đóng hộp" nào có hình dạng này nhưng không quá khó để "nấu chín" một bản phân phối có các đặc tính nêu trên.
Dưới đây là một ví dụ mô phỏng (trong R
):
set.seed(1234)
x=rexp(1e3)
y=-rexp(1e3,rate=2)
z=c(x,y)
qqnorm(z)
qqline(z) # see below for the plot.
plot( ecdf(z) ) # see below for plot (2nd plot)
Ví dụ này tạo ra một qqplot và CDF theo kinh nghiệm khá giống nhau (định tính) với những gì bạn đang thấy:
Để tìm ra phân phối nào phù hợp nhất, trước tiên tôi sẽ xác định một số phân phối mục tiêu tiềm năng: Tôi sẽ nghĩ về quy trình thực tế tạo ra dữ liệu, sau đó tôi sẽ phù hợp với một số mật độ tiềm năng cho dữ liệu và so sánh điểm số loglik của họ để xem phân phối tiềm năng nào phù hợp nhất. Điều này dễ dàng trong R với chức năng fitdistr trong thư viện MASS.
Nếu dữ liệu của bạn giống như z của Macro thì:
>fitdistr(z,'cauchy',list(location=mean(z),scale=sqrt(sd(z))))$loglik
[1] -2949.068
> fitdistr(z,'normal')$loglik
[1] -3026.648
> fitdistr(z,'t')$loglik
[1] -2830.861
Vì vậy, điều này mang lại cho phân phối t là phù hợp nhất (trong số những người chúng tôi đã thử) cho dữ liệu của Macro. xác nhận điều này với một số qqplots bằng cách sử dụng các tham số từ fitdistr.
> qqplot(z,rt(length(z),df=2.7))
Sau đó so sánh cốt truyện này với phân phối khác phù hợp.