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

如何在R中生成0-70区间、均值48的正态分布测试分数数据集

R语言生成指定约束的测试分数数据集

你需要的是截断正态分布,可以在保留近似正态分布特征的同时限定数值上下界,完全匹配你的需求:取值范围0-70、均值48、标准差可控、0分出现概率极低。

方法1:使用truncnorm包实现(最稳定)

这是业内生成截断正态分布的标准方案,参数直接对应你的需求:

# 首次使用先安装包
install.packages("truncnorm")
# 加载包
library(truncnorm)

# 生成100条符合要求的测试分数
score_data <- round(rtruncnorm(
  n = 100,
  a = 0,      # 数值下限
  b = 70,     # 数值上限
  mean = 48,  # 指定均值
  sd = 5      # 标准差,可自行调小让数据更集中
))

生成后可以自行校验效果:

# 查看数据均值
mean(score_data)
# 查看数据范围
range(score_data)
# 直方图看分布形态
hist(score_data)

方法2:无依赖手动实现(无需安装第三方包)

如果不想额外装包,可以用循环重采样的方式实现截断效果:

# 自定义生成函数
generate_test_score <- function(n = 100, target_mean = 48, target_sd = 5, min_score = 0, max_score =70) {
  result <- c()
  # 循环补样直到凑够符合要求的样本量
  while(length(result) < n) {
    tmp <- round(rnorm(n = n - length(result), mean = target_mean, sd = target_sd))
    result <- c(result, tmp[tmp >= min_score & tmp <= max_score])
  }
  return(result)
}

# 调用函数生成数据
score_data <- generate_test_score()

参数调整说明

  • 想要标准差更小,直接修改sd/target_sd参数即可,比如设置为3,分数会更集中在48附近,0分出现概率会进一步降低
  • 由于指定均值48距离下限0差距远、标准差小,实际生成结果几乎不会出现低于20的数值,完全满足0分概率极低的要求
  • 生成的数据集为近似正态分布,完全支持后续T检验等参数检验分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:57:01