Discussion:
Skorelowane zmienne losowe
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
PFG
2005-10-28 14:10:01 UTC
Permalink
Mam taki oto problem: Chcę sobie wygenerować skorelowane
zmienne losowe, niegaussowskie. Z gaussowskimi nie ma
problemu, jeśli mam zmienne {xi_i}, które są i.i.d i o rozkładzie
normalnym, mogę sobie stworzyć ich odpowiednie kobinacje
liniowe eta_i = L_{ij} xi_j. Zmienne {eta_j} też będą gaussowskie,
a współczynniki tych kombinacji mogę dobrać tak, żeby korelacje
pomiędzy poszczególnymi etami były takie, jak sobie życzę
(w szczególności macierz L powinna być (dolnym) czynnikiem Cholesky'ego
pożądanej macierzy kowariancji). Ale co zrobić w sytuacji, w której
moje zmienne losowe nie mają być gaussowskie, czy też ogólniej,
alfa-stabilne? Wówczas pomysł z kombinacjami liniowymi odpada,
bo kombinacja nie będzie miała takiego samego rozkładu, jak
zmienne wyjściowe, jeśli nawet będą one i.i.d.

Nieco upraszczając problem - czy też sprowadzając go do konkretu
- czy ma ktoś pomysł jak wygenerować skorelowane zmienne
o rozkładzie jednorodnym? Chcę zatem mieć parę zmiennych
x, y, takich, żeby każde miało rozkład jednorodny na [0,1],
natomiast żeby ich współczynnik korelacji był z góry zadany.
Gugle nie pokazał mi niczego użytecznego.
--
Paweł Góra
not with a bang but a whimper
Jakub Wróblewski
2005-10-28 16:20:54 UTC
Permalink
Witam,
Post by PFG
Nieco upraszczając problem - czy też sprowadzając go do konkretu
- czy ma ktoś pomysł jak wygenerować skorelowane zmienne
o rozkładzie jednorodnym? Chcę zatem mieć parę zmiennych
x, y, takich, żeby każde miało rozkład jednorodny na [0,1],
natomiast żeby ich współczynnik korelacji był z góry zadany.
Nie wiem, czy ten sposob Ci sie spodoba...

x ~ U[0,1] (zalozmy, ze tak sie oznacza rozklad jednorodny...)

if(x<t) then y=x/t else y ~ U(0,1)


Wtedy (x,y) to owa para zmiennych, a t jest wspolczynnikiem regulujacym
korelacje. Oczywiscie dla t=0 mamy korelacje 0, dla t=1 mamy korelacje 1,
dla posrednich - trzeba by policzyc.

Pozdrawiam,
Jakub Wroblewski
Takamura
2005-10-28 19:03:24 UTC
Permalink
Post by Jakub Wróblewski
Post by PFG
Nieco upraszczając problem - czy też sprowadzając go do konkretu
- czy ma ktoś pomysł jak wygenerować skorelowane zmienne
o rozkładzie jednorodnym? Chcę zatem mieć parę zmiennych
x, y, takich, żeby każde miało rozkład jednorodny na [0,1],
natomiast żeby ich współczynnik korelacji był z góry zadany.
Nie wiem, czy ten sposob Ci sie spodoba...
x ~ U[0,1] (zalozmy, ze tak sie oznacza rozklad jednorodny...)
if(x<t) then y=x/t else y ~ U(0,1)
Doskonały pomysl.
Dodać trzeba tylko t = Sqrt[R]
Otrzymany rozkład y będzie jednorodny a Corr(x,y) = R ( oczywiście z
fluktuacjami dla mniejszej liczby losowań)
--
takamura
Takamura
2005-10-28 20:31:02 UTC
Permalink
Post by Takamura
Post by Jakub Wróblewski
Nie wiem, czy ten sposob Ci sie spodoba...
x ~ U[0,1] (zalozmy, ze tak sie oznacza rozklad jednorodny...)
if(x<t) then y=x/t else y ~ U(0,1)
Doskonały pomysl.
Dodać trzeba tylko t = Sqrt[R]
Otrzymany rozkład y będzie jednorodny a Corr(x,y) = R ( oczywiście z
fluktuacjami dla mniejszej liczby losowań)
Odpowiem sam sobie.
To jest doskonały przykład jak wzory statystyczne stosowane mechanicznie
mogą prowadzić na manowce.
Bo prawdą jest że rozkład y jest jednostajny, że obliczony współczynnik
korelacji wynosi R. Jednak jednak jak popatrzymy na wykres x vs y to
zgroza i na pewno Pawłowi nie oto chodziło.
--
takamura
SDD
2005-10-29 11:35:44 UTC
Permalink
Post by Takamura
korelacji wynosi R. Jednak jednak jak popatrzymy na wykres x vs y to
zgroza i na pewno Pawłowi nie oto chodziło.
Juz sobie zrobilem wykres w Open Office.
Zastapienie warurnku if (x < t) probabilistycznym sitem opartym o pomocnicza
zmienna losowa - czyli zamiast x < t mamy u < t troszeczke upieksza nasz
wykres - wartosci nieskorelowane pojawiaja sie na calym wykresiea nie tylko
na jego koncu :)

Pozdrawiam
SDD
--
Przepisu, jak życie wziąć w cugle, nie znajdziesz nawet i w Google. (SDD)
SDD
2005-10-29 11:35:49 UTC
Permalink
Post by Takamura
Post by Jakub Wróblewski
if(x<t) then y=x/t else y ~ U(0,1)
korelacji wynosi R. Jednak jednak jak popatrzymy na wykres x vs y to
zgroza i na pewno Pawłowi nie oto chodziło.
Nie wiem za bardzo, jak wyglada ten wykres (nie chce mi sie go wyobrazac, a
nei generowalem go jeszcze niczym... - ale gdyby tak moze zastapic warunek
if (x < t) jakims bardziej probabilistycznym sitem?

Pozdrawiam
SDD
--
Przepisu, jak życie wziąć w cugle, nie znajdziesz nawet i w Google. (SDD)
Jakub Wróblewski
2005-10-29 12:02:59 UTC
Permalink
Witam,
Post by Takamura
Post by Jakub Wróblewski
Nie wiem, czy ten sposob Ci sie spodoba...
x ~ U[0,1] (zalozmy, ze tak sie oznacza rozklad
jednorodny...)
if(x<t) then y=x/t else y ~ U(0,1)
(...)
Post by Takamura
To jest doskonały przykład jak wzory statystyczne stosowane mechanicznie
mogą prowadzić na manowce.
Bo prawdą jest że rozkład y jest jednostajny, że obliczony współczynnik
korelacji wynosi R. Jednak jednak jak popatrzymy na wykres x vs y to
zgroza i na pewno Pawłowi nie oto chodziło.
Stad moja uwaga na poczatku.

Ale moze akceptowalne byloby inne rozwiazanie:

x ~ U[0,1]
y ~ U(x-t,x+t) mod 1

gdzie "x mod 1" to czesc ulamkowa liczby. O ile dobrze patrze, to y powinno
miec rozklad jednostajny. Parametr t jest od 0 (wtedy korelacja jest 1) do
1/2 (wtedy korelacja jest 0).

Pozdrawiam,
Jakub Wroblewski
--
http://faq.jakubw.pl - kopie FAQ grup dyskusyjnych pl.sci.*:
*.matematyka: http://ux1.mat.mfc.us.edu.pl/~pgladki/faq/
*.fizyka: http://mer.chemia.polsl.gliwice.pl/~pborys/psffaq/faq/
*.kosmos: http://baza.polsek.org.pl/
Takamura
2005-10-30 01:10:02 UTC
Permalink
Post by Jakub Wróblewski
x ~ U[0,1]
y ~ U(x-t,x+t) mod 1
gdzie "x mod 1" to czesc ulamkowa liczby. O ile dobrze patrze, to y
powinno miec rozklad jednostajny. Parametr t jest od 0 (wtedy korelacja
jest 1) do 1/2 (wtedy korelacja jest 0).
Nie jest całkiem jasna definicja mod 1.
Przyjąłem ją tak.
Jeżeli oznaczymy y1 = U(x-t,x+t)
jeżeli y1 > 1 to y = y1 - 1
y1 < 0 to y = y1 + 1
w pozostałych przypadkach y = y1.

Otrzymany rozkład jest jednostajny i na tym kończy się jego zaleta.

Weź t=0.25. Wykres x vs y wygląda jak lecąca strzała z satelitami :)
t=0.05 O, mamy korytarz ( to trzeba zobaczyć !)

Jeżeli zmodyfikujemy algorytm :
jeżeli (y1>1) lub (y1<0) to losujemy ponownie x i y1 to otrzymany
rozkład nie jest jednostajny ( trapez !)

Myślę, że nie tędy droga.
--
takamura
Andrzej Komisarski
2005-10-30 08:10:41 UTC
Permalink
Post by Takamura
Post by Jakub Wróblewski
x ~ U[0,1]
y ~ U(x-t,x+t) mod 1
gdzie "x mod 1" to czesc ulamkowa liczby. O ile dobrze patrze, to y
powinno miec rozklad jednostajny. Parametr t jest od 0 (wtedy korelacja
jest 1) do 1/2 (wtedy korelacja jest 0).
[...]
Post by Takamura
Otrzymany rozkład jest jednostajny i na tym kończy się jego zaleta.
Weź t=0.25. Wykres x vs y wygląda jak lecąca strzała z satelitami :)
t=0.05 O, mamy korytarz ( to trzeba zobaczyć !)
Myślę, że nie tędy droga.
A co? Chciałbyś otrzymać cały, pełny, do tego równo wypełniony kwadrat?
To by oznaczało, że X i Y są niezależne, a tego właśnie nie chcemy.
Można pomysł Jakuba trochę poprawić tak, by cały kwadrat był wypełniony
choć oczywiście nie równo. Na przykład tak:
x ~ U[0,1]
y ~ N(x,t) mod 1
gdzie N(x,t) to rozkład normalny o średniej x i wariancji t
(gdy t jest bliskie 0, to wsp. korelacji jest bliski 1, a gdy t jest
bliskie oo, to wsp. korelacji jest bliski 0).
Zamiast rozkładu normalnego można brać też prawie każdy inny...
--
Andrzej Komisarski
J.F.
2005-10-30 15:42:57 UTC
Permalink
Post by Andrzej Komisarski
A co? Chciałbyś otrzymać cały, pełny, do tego równo wypełniony kwadrat?
To by oznaczało, że X i Y są niezależne, a tego właśnie nie chcemy.
Można pomysł Jakuba trochę poprawić tak, by cały kwadrat był wypełniony
x ~ U[0,1]
y ~ N(x,t) mod 1
gdzie N(x,t) to rozkład normalny o średniej x i wariancji t
(gdy t jest bliskie 0, to wsp. korelacji jest bliski 1, a gdy t jest
bliskie oo, to wsp. korelacji jest bliski 0).
Drobny niuans - przy niezerowej korelacji na histogramie (x,y)
pojawia sie zageszczenie w otoczeniu punktow (0,1) i (1,0) - czyli
tam gdzie nie powinno jej byc.
Co zreszta bedzie ciekawie wplywac na wspolczynnik korelacji.

Moze jednak
x ~ U[0,1]
y ~ N(x,t)

Po czym losujemy powtornie y jesli wychodzi poza zakres.
czy moze lepiej losuwac powtornie cale x,y ?
Albo jeszcze:
t ~ U[0,1]
v ~ N(x,t)

x=t+v
y=t-v

i znow odrzucamy te spoza zakresu.

A tak swoja droga .. jesli mamy jeden generator pseudolosowy
w programie, ktorym generujemy kolejno x i y - to one juz
sa w pewnym stopniu skorelowane.

J.
thrunduil
2005-10-28 17:33:15 UTC
Permalink
Post by PFG
Mam taki oto problem: Chcę sobie wygenerować skorelowane
zmienne losowe, niegaussowskie. Z gaussowskimi nie ma
problemu, jeśli mam zmienne {xi_i}, które są i.i.d i o rozkładzie
normalnym, mogę sobie stworzyć ich odpowiednie kobinacje
liniowe eta_i = L_{ij} xi_j. Zmienne {eta_j} też będą gaussowskie,
a współczynniki tych kombinacji mogę dobrać tak, żeby korelacje
pomiędzy poszczególnymi etami były takie, jak sobie życzę
(w szczególności macierz L powinna być (dolnym) czynnikiem Cholesky'ego
pożądanej macierzy kowariancji). Ale co zrobić w sytuacji, w której
moje zmienne losowe nie mają być gaussowskie, czy też ogólniej,
alfa-stabilne? Wówczas pomysł z kombinacjami liniowymi odpada,
bo kombinacja nie będzie miała takiego samego rozkładu, jak
zmienne wyjściowe, jeśli nawet będą one i.i.d.
Fast fifth-order polynomial transforms for generating univariate and
multivariate nonnormal distributions
Todd C. Headrick
Computational Statistics & Data Analysis 40 (2002) 685 - 711
p***@dionizos.zind.ikem.pwr.wroc.pl
2005-10-28 19:10:02 UTC
Permalink
Post by PFG
Nieco upraszczając problem - czy też sprowadzając go do konkretu
- czy ma ktoś pomysł jak wygenerować skorelowane zmienne
o rozkładzie jednorodnym? Chcę zatem mieć parę zmiennych
x, y, takich, żeby każde miało rozkład jednorodny na [0,1],
natomiast żeby ich współczynnik korelacji był z góry zadany.
Gugle nie pokazał mi niczego użytecznego.
1)

Nie wiem czy te pozycje coś podsuną:

http://www.nd.edu/~nathaz/journals/(1998)Simulation_of_Correlated_Non-Gaussian_Pressure_Fields.pdf

Simulation of Dependent Samples of Symmetric Alpha-Stable Clutter
http://ieeexplore.ieee.org/iel5/97/19826/00917700.pdf?arnumber=917700

Generating correlated multivariate RVs
http://groups.google.pl/group/sci.stat.math/browse_thread/thread/93b4344d12af8949/616f9b2c5d469d2d?lnk=st&q=non-Gaussian+correlated-variables&rnum=1&hl=en#616f9b2c5d469d2d

Być może coś znajdziesz kręcąc się wokół nazwiska Luc Devroye.

2) Może pójść tym tropem: PDF sumy dwóch zmiennych niezależnych jest splotem
ich gęstości.

Aby rozpleźć rozkład równomierny na [0,a] o gęstości f(x)=(H(x)-H(x-a))/a
robimy g(x)=L^-1(sqrt(L(f(x)))), gdzie L/L^-1 transformata Laplace'a i jej
odwrotnośc, a H funkcja Heaviside'a.

I o ile się nie rąbnąłem to

g(x) = H(x)/sqrt(x)/sqrt(2*a)-H(x-a)/sqrt(x-a/2)/sqrt(2*a)

może da się zrobić coś ogólniejszego.
p***@dionizos.zind.ikem.pwr.wroc.pl
2005-10-31 07:39:23 UTC
Permalink
Post by p***@dionizos.zind.ikem.pwr.wroc.pl
Post by PFG
Nieco upraszczając problem - czy też sprowadzając go do konkretu
- czy ma ktoś pomysł jak wygenerować skorelowane zmienne
o rozkładzie jednorodnym? Chcę zatem mieć parę zmiennych
x, y, takich, żeby każde miało rozkład jednorodny na [0,1],
natomiast żeby ich współczynnik korelacji był z góry zadany.
Gugle nie pokazał mi niczego użytecznego.
1)
Następny ślad:

The following paper gives an algorithm for computing what you ask for.
B. Melamed, "TES: a class of methods for generating autocorrelated
uniform variates", ORSA J. on Computing, vol.3, no. 4, pp.317-329,
1991.
Post by p***@dionizos.zind.ikem.pwr.wroc.pl
Być może coś znajdziesz kręcąc się wokół nazwiska Luc Devroye.
Czytam sobie książkę Devroye'a:

Non-Uniform Random Variate Generation
(originally published with Springer-Verlag, New York, 1986)
http://cgm.cs.mcgill.ca/~luc/rnbookindex.html

i rozdziale XI jest kilka przykładów rozkładów dwóch (skorelowanych)
zmiennych U, np. rozkład Placketta (i generator Mardii, ale chyba błędny)
Przemek Biecek
2005-11-03 13:58:46 UTC
Permalink
Post by PFG
Nieco upraszczając problem - czy też sprowadzając go do konkretu
- czy ma ktoś pomysł jak wygenerować skorelowane zmienne
o rozkładzie jednorodnym?
z korelacja pomiedzy zmiennymi, ktore nie sa normlane, jest taki
problem, ze mozna miec rozne laczne rozklady, pomimo ze brzegowe beda
takie same i wspolczynnik korelacji rowniez taki sam (przyklad:
propozycje Jakuba Wroblewskiego)

Tak wiec metode generacji zmiennych najlepiej dobierz do problemu, ktory
chcesz rozwiazac.

Zdarza sie, ze w zagadnieniach wielokrotnego testowania potrzebuje
skorelowanych zmiennych jednostajnych, na wlasne potrzeby losuje
wartosci w taki sposob:

1. generuje skorelowane zmienne o rozkladzie normalny o wspolczynniku
korelacji r
2. przeksztalcam kazda zmienna transformata F^{-1} (umowmy sie ze F to
dystrybuanta r. normalnego)
3. licze korelacje pomiedzy przeksztalconymi zmiennymi (brzegowy rozklad
jest jednostajny) i tak dobieram ,,r'' by korelacja wyszla taka jak chce.

Jezeli ta procedura Ci nie odpowiada to w sieci i literaturze szukalbym
czegos nt. metody kopuł.
--
pozdrawiam,
Przemyslaw Biecek
www.prevision.pl
Loading...