【发布时间】:2018-11-20 09:42:45
【问题描述】:
我在 MATLAB 中使用randn 为给定的均值和标准差生成一组随机数。
b=5000;
a=500;
y = a.*randn(100,1) + b;
sprintf('%f\n',y)
我预计生成的数字将介于 4500 到 5500 之间。但是,我看到的值在 3000 到 6000 之间。
有人能解释一下为什么会这样吗?
或者有什么方法可以指定值应该介于平均值加/减 1 SD 之间?
【问题讨论】:
-
值不能全部位于平均值周围的正负 1SD 之间,因为标准差是对平均值周围数据的平均离散度的度量,您也需要该平均值是最大值。唯一可行的方法是使用一个分布,其中数字仅以相等的概率取值 (mean-sigma) 或 (mean+sigma)。
y = a.*(2*(rand(100,1)<.5)-1)+b; -
将值强制为特定间隔的唯一方法是放弃高斯分布。你想要什么分布?截断高斯?
-
@LuisMendo 均值和标准差来自实验测量。由于数据点不可用,我正在尝试根据均值和标准差创建数据集。例如,测量可能与生物细胞的任何物理特性(如大小)有关。由于大多数自然现象遵循正态分布,我一直使用
randn进行采样。