操纵数据以更好地适应高斯分布

时间:2013-03-19 10:22:10

标签: matlab normal-distribution statistics

我有一个关于正态分布的问题(mu = 0sigma = 1)。

让我说我首先以这种方式调用randn或normrnd

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

现在,为了评估x值与正态分布的拟合程度,我打电话给

[a,b] = normfit(x);

并获得图形支持

histfit(x)

现在谈到问题的核心:如果我对x如何适合给定的正态分布不满意,我怎样才能优化 x 以便更好地符合预期的正态分布分布 0 mean 1标准差 ??有时由于少数表示值(在这种情况下 4096 ), x 非常适合预期的高斯,所以我想操纵 x 线性或不,在这个阶段并不重要),以便获得更好的健康。

我想说我可以访问统计工具箱。

修改

  1. 我使用normrndrandn制作了示例,因为我的数据已被假定并且预计会正常分发。但是,在这个问题中,这些功能只会有助于更好地理解我的担忧。

  2. 是否可以应用最小二乘拟合?

  3. 一般来说,我得到的分布类似于以下内容: enter image description here

2 个答案:

答案 0 :(得分:3)

也许,您可以尝试将输入数据标准化为mean = 0和sigma = 1。像这样:

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

答案 1 :(得分:1)

如果您正在搜索会使分布看起来正常的非线性变换,您可以先估计累积分布,然后使用标准正态CDF的倒数得到函数组合。这样,您可以通过可逆转换将几乎任何分布转换为正态分布。请看下面的示例代码。

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);