我试着用正态分布函数生成1000个正态分布的随机值。
A = normrnd(4,1,[1000 1]);
我想将最小值设置为2。但是,该函数只能定义平均值和sd。如何设置最小值为2?
发布于 2017-06-27 18:52:13
你不能。高斯分布或正态分布的数字是钟形曲线,尾部逐渐变小到无穷大。你所能做的就是“审查”它们,去掉超过一个分界点的每一个数字。
发布于 2017-06-27 19:23:48
由于您选择了mean =4和sigma = 1,您将最终得到大约95%的A元素落入范围2,6。值小于2的元素的数量约为2.5%。如果您认为这个数字很小,您可以将这些元素包装为最小值。例如:
A = normrnd(4,1,[1000 1]);
A(A < 2) = A(A<2) + 2 - min(A(A<2))
当然,从技术上讲,它不是高斯分布。然而,如果你完全控制了均值和西格玛,你可以通过向A添加一个偏移量来得到一个“更像高斯”的分布:
A = A + 2 - min(A)
发布于 2017-06-27 23:31:57
注意:这假设您可以任意设置标准差,但实际情况可能并非如此
正如其他人所说,您不能为真正的高斯指定下限。但是,您可以生成高斯并估计1-p
百分比的值高于该值,然后忽略p
百分比的值(它将落在您的临界值之外)。
例如,在下面的代码中,我生成了一个高斯分布,其中95%的数据点落在2以上。然后,我删除了所有低于2的点,因为我知道5%的数据将被删除。
这是一个解决方案,因为将p设置为更接近于零,您获得遵循高斯曲线并完全高于您的截止值的未经审查的样本数据的机会将达到100% (实际上,它是由p/n
比率定义的,但如果n
是固定的,这是正确的)。
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]);
我建议删除低于分界值的值,而不是将它们重新归因于您的分布的下限,但这取决于您。
A(A<cutoff) = []; % removes all values of A less than cutoff
如果你想要对称(你应该防止样本倾斜),下面的方法应该是可行的。
A(A>(2*mu-cutoff)) = [];
https://stackoverflow.com/questions/44778427
复制相似问题