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!
Odpowiedzi:
Po długich poszukiwaniach, skacząc wokół forów internetowych, konsultacji z profesorami i robi dużo przeglądu literatury, doszedłem do wniosku, że prawdopodobnie jedynym sposobem rozwiązania tego problemu jest dzięki zastosowaniu copulas winorośli rzeczywiście. Daje to pewną kontrolę nad parowaniem skośności i kurtozą (lub dowolnymi wyższymi momentami) - dla losowego wektora p-zmiennego i swobodą określania pary kopul p-1 oraz pozostałego p * (p-1) / 2 - ( p-1) wymiary mogą być określone w pewnego rodzaju kopule warunkowej.
Z zadowoleniem przyjmuję inne metody, z którymi mogliby się spotkać ludzie, ale przynajmniej zostawię ten wskaźnik w kierunku odpowiedzi, ponieważ nie mogę przez całe życie znaleźć innych sposobów rozwiązania tego problemu.
źródło
Być może będziesz w stanie rozwiązać ten problem, modyfikując algorytm Ruscio i Kaczetowa (2008). Ich praca zawiera algorytm iteracyjny (z kodem R), który minimalizuje różnicę między faktycznymi a zamierzonymi kształtami brzeżnymi. Być może będziesz w stanie go zmodyfikować, aby był ukierunkowany na momenty wielowymiarowe (a nie marginalne).
Ruscio, J., i Kaczetow, W. (2008). Symulowanie wielowymiarowych nienormalnych danych przy użyciu iteracyjnego algorytmu. Multivariate Behavioural Research, 43 (3), 355–381. doi: 10.1080 / 00273170802285693
źródło
Możesz sprawdzić Uogólniony rozkład eliptyczny , który pozwala na uzyskanie „klasycznej” matrycy kształtu z elastycznością dla innych funkcji.
źródło
Wymyśliłem prostą metodę na zrobienie tego, która nie wymaga coplas i innych złożonych projektów. Obawiam się, że nie mam formalnego odniesienia, chociaż metoda wydaje się bardzo skuteczna.
Pomysł jest prosty. 1. Narysuj dowolną liczbę zmiennych ze wspólnego rozkładu normalnego. 2. Zastosuj jednoczynnikowy normalny CDF zmiennych, aby uzyskać prawdopodobieństwo dla każdej zmiennej. 3. Na koniec zastosuj odwrotny CDF dowolnego rozkładu, aby zasymulować losowanie z tego rozkładu.
Wymyśliłem tę metodę w 2012 roku i zademonstrowałem przy użyciu Staty . Napisałem również ostatnich post pokazujący tę samą metodę przy użyciu R .
źródło
Wierzę, że metoda przedstawiona w poniższych artykułach pozwala na generowanie losowych wielowymiarowych z dowolną (wykonalną) kombinacją średniej, wariancji, skośności i kurtozy.
Zastrzeżenie: Jestem nie jeden z autorów.
źródło