Chuyển đổi để tăng kurtosis và độ lệch của rv bình thường


20

Tôi đang nghiên cứu một thuật toán dựa trên thực tế là các quan sát thường được phân phối và tôi muốn kiểm tra tính mạnh mẽ của thuật toán đối với giả định này theo kinh nghiệm.Y

Để làm điều này, tôi đang tìm kiếm một chuỗi các biến đổi mà sẽ dần dần phá vỡ trạng thái bình thường của . Ví dụ: nếu s bình thường, chúng có độ lệch và kurtosis , và thật tuyệt khi tìm thấy một chuỗi biến đổi tăng dần cả hai.Y Y = 0 = 3T1(),,Tn()YY=0=3

Ý tưởng của tôi là mô phỏng một số dữ liệu phân tán bình thường và kiểm tra thuật toán trên đó. Hơn thuật toán thử nghiệm trên mỗi tập dữ liệu được chuyển đổi , để xem mức độ đầu ra thay đổi.T 1 ( Y ) , Hoài , T n ( y )YT1(Y),,Tn(y)

Lưu ý rằng tôi không kiểm soát phân phối của các mô phỏng , vì vậy tôi không thể mô phỏng chúng bằng cách sử dụng phân phối tổng quát hóa Bình thường (chẳng hạn như Phân phối lỗi tổng quát Skewed).Y


2
Vấn đề với một chuỗi các biến đổi như thế là kết luận của bạn bị giới hạn trong các tác động của chuỗi đó. Chuỗi của bạn sẽ có hiệu lực tìm ra một đường dẫn trong không gian tương ứng với một họ phân phối dựa trên một biến đổi (có lẽ là một tham số, vì bạn nói 'chuỗi') của phép biến đổi bình thường. Cho rằng vùng khả thi là 2D và đối với bất kỳ điểm đã cho nào trong đó, có vô số phân phối khác nhau, nhìn vào một gia đình duy nhất tìm ra một đường cong sẽ hạn chế phần nào ... (ctd )( γ 1 , γ 2 )(γ1,γ2)(γ1,γ2)
Glen_b -Reinstate Monica 23/215

1
(ctd) ... đặc biệt là nếu gia đình cụ thể mà bạn tạo ra không có xu hướng tiết lộ các vấn đề có thể khá phổ biến.
Glen_b -Reinstate Monica

Câu trả lời:


22

Điều này có thể được thực hiện bằng cách sử dụng phép chuyển đổi sinh-arcsinh từ

Jones, MC và Pewsey A. (2009). Sinh-arcsinh phân phối . Biometrika 96: 761 Bắn780.

Việc chuyển đổi được định nghĩa là

()H(x;ϵ,δ)=sinh[δsinh1(x)ϵ],

trong đó và . Khi chuyển đổi này được áp dụng cho bình thường CDF , nó tạo ra một bản phân phối unimodal có các tham số kiểm soát xiên và kurtosis, tương ứng (Jones và Pewsey, 2009), theo nghĩa của van Zwet (1969) . Ngoài ra, nếu và , chúng tôi có được phân phối chuẩn ban đầu. Xem mã R sau đây. δ R + S ( x ; ε , δ ) = Φ [ H ( x ; ε , δ ) ] ( ε , δ ) ε = 0 δ = 1ϵRδR+S(x;ϵ,δ)=Φ[H(x;ϵ,δ)](ϵ,δ)ϵ=0δ=1

fs = function(x,epsilon,delta) dnorm(sinh(delta*asinh(x)-epsilon))*delta*cosh(delta*asinh(x)-epsilon)/sqrt(1+x^2)

vec = seq(-15,15,0.001)

plot(vec,fs(vec,0,1),type="l")
points(vec,fs(vec,1,1),type="l",col="red")
points(vec,fs(vec,2,1),type="l",col="blue")
points(vec,fs(vec,-1,1),type="l",col="red")
points(vec,fs(vec,-2,1),type="l",col="blue")

vec = seq(-5,5,0.001)

plot(vec,fs(vec,0,0.5),type="l",ylim=c(0,1))
points(vec,fs(vec,0,0.75),type="l",col="red")
points(vec,fs(vec,0,1),type="l",col="blue")
points(vec,fs(vec,0,1.25),type="l",col="red")
points(vec,fs(vec,0,1.5),type="l",col="blue")

Do đó, bằng cách chọn một chuỗi các tham số thích hợp , bạn có thể tạo một chuỗi phân phối / biến đổi với các mức độ lệch và kurtosis khác nhau và làm cho chúng trông giống hoặc khác với phân phối bình thường như bạn muốn.(ϵn,δn)

Biểu đồ sau đây cho thấy kết quả được tạo bởi mã R. Cho (i) và và (ii) và .δ = 1 ε = 0 δ = ( 0,5 , 0,75 , 1 , 1,25 , 1,5 )ϵ=(2,1,0,1,2)δ=1 ϵ=0δ=(0.5,0.75,1,1.25,1.5)

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Việc mô phỏng phân phối này rất đơn giản khi bạn chỉ cần chuyển đổi một mẫu bình thường bằng cách sử dụng nghịch đảo của .()

H1(x;ϵ,δ)=sinh[δ1(sinh1(x)+ϵ)]

2
Cảm ơn rất nhiều Procrastinator! Điều này thật đúng với gì mà tôi đã tìm kiếm.
Matteo Fasiolo

2
Có vẻ như gamlss.dist::rSHASHocó thể tạo ra bản phân phối này.
Artem Klevtsov

7

Điều này có thể được thực hiện bằng cách sử dụng các biến / phân phối ngẫu nhiên của Lambert W x F. Một biến ngẫu nhiên Lambert W x F (RV) là một biến đổi phi tuyến tính (RV) X với phân phối F.

Vì F là phân phối chuẩn và , chúng giảm xuống phân phối h của Tukey. Đặc tính tốt của các bản phân phối Lambert W x F là bạn cũng có thể quay lại từ không bình thường trở lại Bình thường; tức là bạn có thể ước tính các tham số và dữ liệu của bạn.α=1Gaussianize()

Chúng được thực hiện trong

Các biến đổi Lambert W x F có 3 hương vị:

  • skewed ( type = 's') với tham số độ lệchγR
  • đuôi nặng ( type = 'h') với tham số đuôi (và tùy chọn )αδ0α
  • xiên và đuôi nặng ( type = 'hh') với tham số đuôi trái / phải δl,δr0

Xem Tài liệu tham khảo về xiênđuôi nặng (Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả.)

Trong R, bạn có thể mô phỏng, ước tính, vẽ đồ thị, v.v ... một số bản phân phối Lambert W x F với gói LambertW .

library(LambertW)
library(RColorBrewer)
# several heavy-tail parameters
delta.v <- seq(0, 2, length = 11)
x.grid <- seq(-5, 5, length = 100)
col.v <- colorRampPalette(c("black", "orange"))(length(delta.v))

plot(x.grid, dnorm(x.grid), lwd = 2, type = "l", col = col.v[1],
     ylab = "")
for (ii in seq_along(delta.v)) {
  lines(x.grid, dLambertW(x.grid, "normal", 
                          theta = list(delta = delta.v[ii], beta = c(0, 1))),
        col = col.v[ii])
}
legend("topleft", paste(delta.v), col = col.v, lty = 1,
       title = "delta = ")

nhập mô tả hình ảnh ở đây

Nó hoạt động tương tự cho một chuỗi để thêm độ lệch. Và nếu bạn muốn thêm độ lệch và đuôi nặng thì hãy tạo một chuỗi và .δ l δ rγδlδr


5

Một chuỗi như vậy là lũy thừa đến nhiều mức độ khác nhau. Ví dụ

library(moments)
x <- rnorm(1000) #Normal data
x2 <- 2^x #One transformation
x3 <- 2^{x^2} #A stronger transformation
test <- cbind(x, x2, x3) 
apply(test, 2, skewness) #Skewness for the three distributions
apply(test, 2, kurtosis) #Kurtosis for the three distributions

Bạn có thể sử dụng để có các mức độ chuyển đổi trung gian.x1.1,x1.2Giáo dụcx2


0

Câu trả lời tương tự như @ user10525 nhưng trong python

import numpy as np
from scipy.stats import norm
def sinh_archsinh_transformation(x,epsilon,delta):
    return norm.pdf(np.sinh(delta*np.arcsinh(x)-epsilon))*delta*np.cosh(delta*np.arcsinh(x)-epsilon)/np.sqrt(1+np.power(x,2))


vec = np.arange(start=-15,stop=15+0.001,step=0.001)

import matplotlib.pyplot as plt
plt.plot(vec,sinh_archsinh_transformation(vec,0,1))
plt.plot(vec,sinh_archsinh_transformation(vec,1,1),color='red')
plt.plot(vec,sinh_archsinh_transformation(vec,2,1),color='blue')
plt.plot(vec,sinh_archsinh_transformation(vec,-1,1),color='red')
plt.plot(vec,sinh_archsinh_transformation(vec,-2,1),color='blue')

[1]

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.