You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用map_dbl()的两种R代码逻辑相似为何输出不同?

抽样误差计算结果不一致的原因解析

你在计算不同样本量的抽样误差时,两段逻辑看似一致的代码输出结果不同,核心原因在于随机数生成的状态未重置。

初始设置

set.seed(4)
parameter  <-  mean(houses$SalePrice) # parameter value = 180796.1
sample_sizes  <-  seq(from = 5, by=29, length.out=100)
library(purrr)

你的代码

sample_means <- map_dbl(sample_sizes, function(x) mean(sample(houses$SalePrice, size=x)))
sampling_errors_a <- parameter - sample_means

参考代码

sampling_errors <- map_dbl(sample_sizes, function(x) parameter - mean(sample(houses$SalePrice, size=x)))

关键原因

R的随机数生成器有一个内部状态,每次调用sample()(或其他随机函数)时,这个状态会向前推进,生成下一组随机数。如果在同一个会话中先运行你的代码,会调用100次sample(),消耗掉前100组随机数;之后运行参考代码时,sample()会从第101组随机数开始生成样本,自然得到不同的抽样结果,最终导致误差值不一致。

验证方法

在运行每一段代码前重新设置随机种子,让两者的随机数起点一致:

# 运行你的代码
set.seed(4)
sample_means <- map_dbl(sample_sizes, function(x) mean(sample(houses$SalePrice, size=x)))
sampling_errors_a <- parameter - sample_means

# 重置种子后运行参考代码
set.seed(4)
sampling_errors <- map_dbl(sample_sizes, function(x) parameter - mean(sample(houses$SalePrice, size=x)))

# 此时验证结果一致
identical(sampling_errors_a, sampling_errors) # 返回 TRUE

逻辑等价性

从数学计算上看,两段代码完全等价:

  • 你的代码是先批量计算所有样本均值,再统一减去总体参数;
  • 参考代码是在每次迭代中直接计算总体参数与样本均值的差值。
    两者的计算逻辑没有差异,差异仅来自随机抽样的随机性(随机数状态未重置导致的样本不同)。

内容的提问来源于stack exchange,提问作者Andrea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:25:18