Chciałbym znaleźć metodę generowania skorelowanych, nienormalnych danych. Idealnie więc jakiś rodzaj rozkładu, który przyjmuje parametr kowariancji (lub korelacji) jako parametr i generuje dane, które ją przybliżają. Ale tutaj jest haczyk: metoda, którą próbuję znaleźć, powinna mieć elastyczność, aby kontrolować również jej wielowymiarową skośność i / lub kurtozę.
Znam metodę Fleishmana i użycie metody mocy normalnych zmiennych, ale wierzę, że większość z tych rozszerzeń pozwala użytkownikowi tylko na pewne kombinacje marginalnej skośności i kurtozy, pozostawiając wielowymiarową skośność / kurtozę. Zastanawiałem się, czy istnieje metoda, która pomaga określić skośność i / lub kurtozę wielowymiarową wraz z pewną strukturą korelacji / kowariancji.
Około rok temu wziąłem seminarium na temat rozkładów kopuł i pamiętam, jak profesor od niechcenia wspominał, że dzięki zastosowaniu kopuł winorośli można wygenerować dane, które, powiedzmy, symetryczne dla każdego z marginesów 1-D, ale razem wypaczone i odwrotnie -versa. Albo jeszcze bardziej, że wszelkie marginesy niższych wymiarów mogą wykazywać pewną skośność lub kurtozę przy zachowaniu najwyższych wymiarów symetrycznych (lub nie). Byłem zdumiony pomysłem, że taka elastyczność może istnieć. Próbowałem znaleźć jakiś artykuł lub artykuł konferencyjny, który opisuje tę metodę, ale mi się nie udało :(. Nie musi to wynikać z zastosowania kopuł, Jestem otwarty na wszystko, co działa.
Edycja: Dodałem trochę kodu R, aby spróbować pokazać, co mam na myśli. Do tej pory jestem tylko dobrze zaznajomiony z definicją Mardii dotyczącą wielowymiarowej skośności i kurtozy. Kiedy po raz pierwszy podszedłem do mojego problemu, naiwnie pomyślałem, że jeśli użyję symetrycznej kopuły (w tym przypadku Gaussa) ze skośnymi marginesami (beta, w tym przykładzie), testy jednowymiarowe na marginesach przyniosłyby znaczenie, ale test Mardii na skośność / kurtozę wielowariantową dałby być nieistotne. Próbowałem tego i nie wyszło tak, jak się spodziewałem:
library(copula)
library(psych)
set.seed(101)
cop1 <- {mvdc(normalCopula(c(0.5), dim=2, dispstr="un"),
c("beta", "beta"),list(list(shape1=0.5, shape2=5),
list(shape1=0.5, shape2=5)))}
Q1 <- rmvdc(cop1, 1000)
x1 <- Q1[,1]
y1 <- Q1[,2]
cop2 <- {mvdc(normalCopula(c(0.5), dim=2, dispstr="un"),
c("norm", "norm"),list(list(mean=0, sd=1),
list(mean = 0, sd=1)))}
Q2 <- rmvdc(cop2, 1000)
x2 <- Q2[,1]
y2 <- Q2[,2]
mardia(Q1)
Call: mardia(x = Q1)
Mardia tests of multivariate skew and kurtosis
Use describe(x) the to get univariate tests
n.obs = 1000 num.vars = 2
b1p = 10.33 skew = 1720.98 with probability = 0
small sample skew = 1729.6 with probability = 0
b2p = 22.59 kurtosis = 57.68 with probability = 0
mardia(Q2)
Call: mardia(x = Q2)
Mardia tests of multivariate skew and kurtosis
Use describe(x) the to get univariate tests
n.obs = 1000 num.vars = 2
b1p = 0.01 skew = 0.92 with probability = 0.92
small sample skew = 0.92 with probability = 0.92
b2p = 7.8 kurtosis = -0.79 with probability = 0.43
Po sprawdzeniu konturów dla „cop1” VS „cop2”, jak również empirycznych wykresów dwuwymiarowej gęstości, widzę również, że żaden z nich wcale nie wygląda symetrycznie. Wtedy zdałem sobie sprawę, że jest to prawdopodobnie trochę bardziej skomplikowane niż myślałem.
Wiem, że Mardia nie jest jedyną definicją wielowymiarowej skośności / kurtozy, więc nie ograniczam się do znalezienia metody, która tylko spełnia definicje Mardii.
Dziękuję Ci!