【问题标题】:manipulate data to better fit a Gaussian Distribution操纵数据以更好地拟合高斯分布
【发布时间】:2013-03-07 23:15:08
【问题描述】:

我有一个关于正态分布的问题(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均值1标准差??有时由于表示值很少(即在这种情况下为 4096),x 与预期的高斯分布的拟合非常差,所以我想操纵 x线性与否,在这个阶段并不重要)以获得更好的适应度。

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

编辑

  1. 我用normrndrandn 做了这个例子,因为我的数据应该并且预期具有正态分布。但是,在问题中,这些功能只会有助于更好地理解我的担忧。

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

  3. 通常我得到的分布类似于以下:

我的

【问题讨论】:

  • 如果您的数据集很小,也许您使用准随机数比使用伪随机数更幸运。 mathworks.com/help/stats/generating-quasi-random-numbers.html
  • 如果您向我们展示您的发行版的外观,那将有所帮助。
  • 您上传的内容看起来很适合我。您可能只需要更多样本。
  • 我知道它已经很好地代表了一个正态分布:关键是我不能增加样本数量。我能达到的最高点一般在2^13左右
  • 您可以使用重叠的 bin 来平滑直方图。

标签: matlab normal-distribution statistics


【解决方案1】:

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

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

【讨论】:

  • 我已经在玩这个小技巧了,这并不能真正解决问题。顺便说一句,感谢您的支持
  • 您应该通过std 而不是var 进行标准化。也可以只使用zscore
【解决方案2】:

如果您正在寻找使您的分布看起来正态的非线性变换,您可以先估计累积分布,然后采用标准正态 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);

【讨论】:

  • 如果您不平滑经验 CDF,这将是完全正常的,但进行这种操作有什么意义呢? :)
猜你喜欢
  • 2015-10-10
  • 2017-06-20
  • 2022-01-19
  • 2019-03-06
  • 1970-01-01
  • 2017-08-30
  • 2016-11-10
  • 2015-01-29
  • 2023-03-19
相关资源
最近更新 更多