2013-03-19 20 views
5

Mam pytanie dotyczące dystrybucji normalnej (z mu = 0 i sigma = 1).manipulować danymi, aby lepiej pasowały do ​​rozkładu Gaussa

powiedzmy, że ja najpierw zadzwonić randn lub normrnd tędy

x = normrnd(0,1,[4096,1]); % x = randn(4096,1) 

teraz, aby ocenić, jak dobre wartości x dopasować rozkład normalny, wzywam

[a,b] = normfit(x); 

i mieć wsparcie graficzne

histfit(x) 

Teraz dochodzimy do sedna pytania: jeśli nie jestem wystarczająco zadowolony z tego, jak x pasuje dany rozkład normalny, w jaki sposób można zoptymalizować x, aby lepiej dopasować oczekiwany rozkład normalny z 0 oznaczać i 1 odchylenie standardowe ?? Czasami z powodu kilku wartości reprezentacji (tj w tym przypadku), x pasuje naprawdę źle oczekiwany Gaussa, tak że chcę manipulować x (liniowo lub nie, to naprawdę nie ma znaczenia na tym etapie), aby uzyskać lepszą kondycję.

Chciałbym zauważyć, że mam dostęp do zestawu narzędzi statystycznych.

EDIT

  1. zrobiłem przykład z normrnd i randn spowodować moje dane mają i oczekuje się, że mają rozkład normalny. Ale w ramach pytania te funkcje są pomocne tylko w lepszym zrozumieniu mojej troski.

  2. Czy można zastosować dopasowanie najmniejszych kwadratów?

  3. Generalnie podział otrzymuję jest podobny do następującego: enter image description here

My

+1

Może lepiej będzie z liczbami quasi-losowymi niż z liczbami pseudolosowymi, jeśli twój zestaw danych jest mały. http://www.mathworks.com/help/stats/generating-quasi-random-numbers.html – Dan

+0

Jeśli pokażesz nam, jak wygląda twoja dystrybucja, to mogłoby to pomóc. – Memming

+0

to, co przesłałeś, wygląda dla mnie bardzo dobrze. Prawdopodobnie potrzebujesz więcej próbek. – Memming

Odpowiedz

3

Być może, można spróbować znormalizować swoje dane wejściowe mają średni = 0 i sigma = 1 . Tak:

y=(x-mean(x))/std(x); 
+0

Gram już z tymi trywialnymi sztuczkami, które tak naprawdę nie rozwiązują problemu. btw, dzięki za wsparcie – fpe

+2

Powinieneś normalizować przez 'std', a nie' var'. Może również użyć 'zscore'. – Memming

+1

Masz całkowitą rację. – tashuhka

1

Jeśli szukasz nieliniowej transformacji, która sprawi dystrybucja wyglądają normalnie, można najpierw oszacować rozkład skumulowany, a następnie podjąć złożenie funkcji z odwrotność standardowego normalnego CDF. W ten sposób możesz przekształcić prawie każdą dystrybucję na normalną poprzez transformację odwracalną. Spójrz na przykładowy kod poniżej.

x = randn(1000, 1) + 4 * (rand(1000, 1) < 0.5); % some funky bimodal distribution 
xr = linspace(-5, 9, 2000); 
cdf = cumsum(ksdensity(x, xr, 'width', 0.5)); cdf = cdf/cdf(end); % you many want to use a better smoother 
c = interp1(xr, cdf, x); % function composition step 1 
y = norminv(c); % function composition step 2 
% take a look at the result 
figure; 
subplot(2,1,1); hist(x, 100); 
subplot(2,1,2); hist(y, 100); 
+0

Jeśli nie wygładzisz empirycznego CDF, będzie to zupełnie normalne, ale jaki byłby sens robienia takiej manipulacji? :) – Memming