我正在尝试复制研究论文的模型,我想看看他们的数据集如何分布到我自己的数据集上。当然,我无法访问他们的原始数据,但我确实有其汇总统计数据。如何创建与以下统计数据相对应的综合数据集:
最小值:0,Q1:0.1378,中位数:0.1831,Q3:0.2304,最大值:1
平均值:0.1853,标准差:0.0831,n:15404
最终目标是将合成数据与我的数据进行图表比较,看看它们有多大差异。如有任何帮助,我们将不胜感激。
我尝试使用 rnorm 创建数据,但毫不奇怪,对一项统计数据的任何调整都会改变其他统计数据。像 simpop 和 Synthpop 这样的包需要现有的数据集。
我过去制作了合成数据集并使用分布函数作为基础,请查看
?stats::distributions
了解 R stats 中的函数范围。
这里我使用
rnorm()
来获得围绕均值和标准差的正态分布。然后我减去\除初始 Q1\median\Q3 并加\乘所需的 Q1\median\Q3。然后将值限制在最小值和最大值。最后,我将 q3 和初始最大值之间的数据拉伸到 q3 和所需最大值 1 之间。
缺点\潜在的改进:
代码:
set.seed(1)
min_val <- 0
Q1_val <- 0.1378
median_val <- 0.1831
mean_val <- 0.1853
Q3_val <- 0.2304
max_val <- 1
sd_val <- 0.0831
n <- 15404
synth <- rnorm(n, mean = mean_val, sd = sd_val)
synth <- (synth - median(synth)) / IQR(synth) * (Q3_val - Q1_val) + median_val
synth <- pmax(pmin(synth, max_val), min_val)
idx <- which(synth > Q3_val)
synth[idx] <- (synth[idx] - Q3_val) / (max(synth[idx]) - Q3_val) * (1 - Q3_val) + Q3_val
summary(synth)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 0.0000 0.1380 0.1831 0.2109 0.2312 1.0000
sd(synth)
#[1] 0.1214862
NROW(synth)
#[1] 15404
hist(synth, breaks = 100)