matlab - sirve - distribucion normal z
manipular datos para ajustarse mejor a una distribuciĆ³n gaussiana (2)
Tengo una pregunta sobre la distribución normal (con mu = 0
y sigma = 1
).
Digamos que primero llamo a randn o normrnd de esta manera
x = normrnd(0,1,[4096,1]); % x = randn(4096,1)
Ahora, para evaluar qué tan buenos valores x se ajustan a la distribución normal, llamo
[a,b] = normfit(x);
y tener un soporte gráfico
histfit(x)
Ahora diríjase al núcleo de la pregunta: si no estoy satisfecho con la forma en que x se ajusta a la distribución normal dada, ¿cómo puedo optimizar x para ajustar mejor la distribución normal esperada con 0 media y 1 desviación estándar ? A veces debido a los pocos valores de representación (es decir, 4096 en este caso), x se ajusta muy mal al Gaussiano esperado, por lo que quiero manipular x ( linealmente o no , realmente no importa en esta etapa) para obtener una mejor condición física .
Me gustaría comentar que tengo acceso a la caja de herramientas estadísticas.
EDITAR
Hice el ejemplo con
normrnd
yrandn
porque se supone y se espera que mis datos tengan una distribución normal. Pero, dentro de la pregunta, esas funciones solo son útiles para comprender mejor mi preocupación.¿Sería posible aplicar un ajuste por mínimos cuadrados?
En general, la distribución que obtengo es similar a la siguiente:
Mi
Si está buscando una transformación no lineal que haría que su distribución parezca normal, primero puede estimar la distribución acumulativa, luego tome la composición de la función con la inversa de la CDF normal estándar. De esta forma, puede transformar casi cualquier distribución en una transformación normal mediante inversión. Eche un vistazo al código de ejemplo a continuación.
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);
Tal vez, puede tratar de normalizar sus datos de entrada para tener mean = 0 y sigma = 1. Me gusta esto:
y=(x-mean(x))/std(x);