2013-03-19 18 views
5

Ho una domanda riguardante la distribuzione normale (con mu = 0 e sigma = 1).manipolare i dati per adattarsi meglio a una distribuzione gaussiana

Let dire che io in primo luogo chiamo randn o normrnd questo modo

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

Ora, per valutare quanto è buono valori x misura la distribuzione normale, io chiamo

[a,b] = normfit(x); 

e di avere un supporto grafico

histfit(x) 

Ora venire al nocciolo della questione: se io sono abbastanza soddisfatto di come x si inserisce la data di distribuzione normale, come posso ottimizzare x al fine di meglio adattarsi alla distribuzione normale previsto con 0 significa e 1 deviazione standard ?? A volte a causa dei valori di rappresentazione poche (cioè in questo caso), x adatta veramente poco l'atteso gaussiana, in modo che io voglio manipolare x (linearmente o no, non ha molta importanza in questa fase) per ottenere una migliore forma fisica.

Mi piacerebbe osservare che ho accesso agli strumenti statistici.

EDIT

  1. ho fatto l'esempio con normrnd e randn causa i miei dati sono supposti e dovrebbe avere una distribuzione normale. Ma, all'interno della domanda, queste funzioni sono utili solo per capire meglio la mia preoccupazione.

  2. Sarebbe possibile applicare un raccordo dei minimi quadrati?

  3. In generale la distribuzione che ottenga è simile al seguente: enter image description here

mio

+1

Forse avrai più fortuna con numeri quasi casuali che con numeri pseudo casuali se il tuo set di dati è piccolo. http://www.mathworks.com/help/stats/generating-quasi-random-numbers.html – Dan

+0

Se ci mostra come appare la tua distribuzione, sarebbe utile. – Memming

+0

quello che hai caricato mi sembra abbastanza adatto a me. Probabilmente hai solo bisogno di più campioni. – Memming

risposta

3

Forse, si può provare a normalizzare i vostri dati di input di avere media = 0 e sigma = 1 . Come questo:

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

Sto giocando già con questi trucchi banali, che in realtà non risolvono la domanda. btw, grazie per il supporto – fpe

+2

Dovresti normalizzare con 'std' not' var'. Potresti anche usare 'zscore'. – Memming

+1

Hai completamente ragione. – tashuhka

1

Se siete alla ricerca di una trasformazione non lineare che renderebbe la vostra distribuzione sembrare normale, è possibile innanzitutto stimare la distribuzione cumulativa, poi prendere la composizione funzione con l'inverso del normale standard CDF. In questo modo puoi trasformare quasi tutte le distribuzioni in una trasformazione normale tramite invertibile. Dai un'occhiata al codice di esempio qui sotto.

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

Se non si appiana il CDF empirico, sarà esattamente normale, ma quale sarebbe il punto di tale manipolazione? :) – Memming