R语言rnorm函数中sd=1:10的含义及验证方法问询
R中rnorm函数sd=1:10的含义及验证方法
一、sd=1:10的实际作用
在rnorm()函数中,当sd参数传入一个向量时,它会和n指定的样本数量一一对应:
你代码里n=10,sd=1:10是长度为10的向量(元素依次为1、2、…、10),所以生成的10个随机数分别来自不同参数的正态分布:
- 第1个数来自均值为0、标准差为1的正态分布
- 第2个数来自均值为0、标准差为2的正态分布
- ……
- 第10个数来自均值为0、标准差为10的正态分布
简单来说,每个生成的随机数对应一个独立的标准差参数,而非所有样本共用同一个标准差。
二、简便的验证命令
方法1:逐个生成对比逻辑
你可以用mapply()逐个生成对应标准差的随机数,和原代码结果做逻辑对比(因为是随机抽样,数值不会完全一致,但每个位置对应的标准差参数是相同的):
# 原代码生成结果 u <- rnorm(mean = 0, sd = 1:10, n = 10) # 按sd逐个生成验证用的随机数 u_verify <- mapply(function(s) rnorm(n=1, mean=0, sd=s), s=1:10) # 查看两组结果 u u_verify
方法2:批量模拟验证分布
如果要确认每个位置的样本确实符合对应标准差的分布,可以多次重复生成,计算每个位置的样本标准差,看是否趋近于1:10:
# 重复生成1000次,每次生成10个对应sd的随机数 sim_results <- replicate(1000, rnorm(mean=0, sd=1:10, n=10)) # 计算每个位置的样本标准差的平均值 colMeans(apply(sim_results, 1, function(x) sd(x)))
运行后会看到结果接近1:10,证明每个位置的样本确实使用了对应的标准差参数。
内容的提问来源于stack exchange,提问作者jck21
相关产品推荐
相关产品推荐

