Трансформація для збільшення куртозу та косості нормальних об


20

Я працюю над алгоритмом, який спирається на те, що спостереження Y s зазвичай розподіляються, і я хотів би перевірити стійкість алгоритму до цього припущення емпірично.

Щоб зробити це, я шукав послідовність перетворень T1(),,Tn() , яка буде поступово руйнувати нормальності Y . Наприклад, якщо Y s нормальні, вони мають косисть =0 і куртоз =3 , і було б непогано знайти послідовність перетворень, яка прогресивно збільшує обидва.

Моя ідея полягала в тому, щоб імітувати деякі нормально приблизно розподілені дані і перевірити алгоритм на цьому. Тоді алгоритм тестування для кожного перетвореного набору даних T 1 ( Y ) , , T n ( y ) , щоб побачити, наскільки змінюється вихід.YT1(Y),,Tn(y)

Зверніть увагу, що я не контролюю розподіл модельованого s, тому не можу імітувати їх за допомогою розподілу, який узагальнює нормальне (наприклад, скасований генералізований розподіл помилок).Y


2
Проблема з такою послідовністю перетворень, як це ваш висновок, обмежується ефектами саме цієї послідовності. Ваша послідовність фактично простежить шлях у просторі, що відповідає одному сімейству розподілів на основі (мабуть однопараметричного, оскільки ви говорите «послідовність») перетворення нормального. Дайте, що життєздатність ( γ 1 , γ 2 )(γ1,γ2)(γ1,γ2) область є 2D і що для будь-якої заданої точки в ній існує нескінченна кількість різних розподілів, дивлячись на те, що одна сім'я, яка простежує одну криву, була б дещо обмежуючою ... (ctd )
Glen_b -Встановити Моніку

1
(ctd) ... особливо якщо конкретна родина, яку ви генеруєте, не виявляє проблем, які в іншому випадку можуть бути досить поширеними.
Glen_b -Встановіть Моніку

Відповіді:


22

Це можна зробити, використовуючи перетворення синх-арчіна з

Джонс, МС та Певсі А. (2009). Син-арчінгові розподіли . Біометріка 96: 761–780.

Перетворення визначається як

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

де і δ R + . Коли це перетворення застосовується до нормального CDF S ( x ; ϵ , δ ) = Φ [ H ( x ; ϵ , δ ) ] , воно виробляє одномодальний розподіл, параметри якого ( ϵ , δ ) керують косою і куртозом відповідно (Джонс та Pewsey, 2009), у значенні ван Цвета (1969) . Крім того, якщо ϵ = 0 і δϵRδR+S(x;ϵ,δ)=Φ[H(x;ϵ,δ)](ϵ,δ)ϵ=0 , ми отримуємо початковий нормальний розподіл. Дивіться наступний код R.δ=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")

Тому, вибравши відповідну послідовність параметрів (ϵn,δn) , можна сформувати послідовність розподілів / перетворень з різними рівнями косості та куртозу та зробити їх схожими або такими ж різними, як і звичайне розподіл.

Наступний графік показує результат, отриманий кодом R. Для (i) і δ = 1 , і (ii) ϵ = 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)

введіть тут опис зображення

введіть тут опис зображення

Моделювання цього розподілу є простим, враховуючи, що вам просто потрібно перетворити звичайний зразок, використовуючи обернену .()

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

2
Велике спасибі Прокрастинатор! Це саме те, що я шукав.
Маттео Фасіоло

2
Здається, gamlss.dist::rSHASHoможе генерувати цей розподіл.
Артем Клевцов

7

Це можна зробити за допомогою випадкових змінних / розподілів Ламберта W x F. Випадкова величина Ламберта W x F (RV) є нелінійно перетвореною (RV) X з розподілом F.

α=1Gaussianize() ваші дані.

Вони реалізовані в Росії

Перетворення Ламберта W x F мають 3 аромати:

  • type = 's'γR
  • type = 'h'δ0α )
  • type = 'hh'δl,δr0

Див. Посилання на перекошені та важкі хвости (відмова: Я автор.)

У R ви можете змоделювати, оцінити, побудувати графік тощо декілька розподілів Lambert W x F за допомогою пакета 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 = ")

введіть тут опис зображення

γδlδr


5

Однією з таких послідовностей є експоненція в різному ступені. Напр

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

x1.1,x1.2x2


0

Відповідь така ж, як @ user10525, але в 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]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.