如何在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
相关产品推荐
相关产品推荐

