首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab中具有最小值的正态分布

Matlab中具有最小值的正态分布
EN

Stack Overflow用户
提问于 2017-06-27 18:49:37
回答 3查看 812关注 0票数 0

我试着用正态分布函数生成1000个正态分布的随机值。

代码语言:javascript
运行
复制
 A = normrnd(4,1,[1000 1]);

我想将最小值设置为2。但是,该函数只能定义平均值和sd。如何设置最小值为2?

EN

回答 3

Stack Overflow用户

发布于 2017-06-27 18:52:13

你不能。高斯分布或正态分布的数字是钟形曲线,尾部逐渐变小到无穷大。你所能做的就是“审查”它们,去掉超过一个分界点的每一个数字。

票数 0
EN

Stack Overflow用户

发布于 2017-06-27 19:23:48

由于您选择了mean =4和sigma = 1,您将最终得到大约95%的A元素落入范围2,6。值小于2的元素的数量约为2.5%。如果您认为这个数字很小,您可以将这些元素包装为最小值。例如:

代码语言:javascript
运行
复制
 A = normrnd(4,1,[1000 1]);

代码语言:javascript
运行
复制
A(A < 2) = A(A<2) + 2 - min(A(A<2))

当然,从技术上讲,它不是高斯分布。然而,如果你完全控制了均值和西格玛,你可以通过向A添加一个偏移量来得到一个“更像高斯”的分布:

代码语言:javascript
运行
复制
A = A + 2 - min(A) 
票数 0
EN

Stack Overflow用户

发布于 2017-06-27 23:31:57

注意:这假设您可以任意设置标准差,但实际情况可能并非如此

正如其他人所说,您不能为真正的高斯指定下限。但是,您可以生成高斯并估计1-p百分比的值高于该值,然后忽略p百分比的值(它将落在您的临界值之外)。

例如,在下面的代码中,我生成了一个高斯分布,其中95%的数据点落在2以上。然后,我删除了所有低于2的点,因为我知道5%的数据将被删除。

这是一个解决方案,因为将p设置为更接近于零,您获得遵循高斯曲线并完全高于您的截止值的未经审查的样本数据的机会将达到100% (实际上,它是由p/n比率定义的,但如果n是固定的,这是正确的)。

代码语言:javascript
运行
复制
n = 1000;    % number of samples
cutoff = 2;  % Cutoff point for min-value
mu = 4;      % Mean
p = .05;     % Percentile you would like to cutoff

z = -sqrt(2) * erfcinv(p*2);  % compute z score
sigma = (cutoff - mu)/z;      % compute standard deviation

A = normrnd(mu,sigma,[n 1]);

我建议删除低于分界值的值,而不是将它们重新归因于您的分布的下限,但这取决于您。

代码语言:javascript
运行
复制
A(A<cutoff) = []; % removes all values of A less than cutoff

如果你想要对称(你应该防止样本倾斜),下面的方法应该是可行的。

代码语言:javascript
运行
复制
A(A>(2*mu-cutoff)) = []; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44778427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档