根据 R 中的 5 个数字汇总、平均值和标准差创建合成数据集

问题描述 投票:0回答:1

我正在尝试复制研究论文的模型,我想看看他们的数据集如何分布到我自己的数据集上。当然,我无法访问他们的原始数据,但我确实有其汇总统计数据。如何创建与以下统计数据相对应的综合数据集:

最小值:0,Q1:0.1378,中位数:0.1831,Q3:0.2304,最大值:1

平均值:0.1853,标准差:0.0831,n:15404

最终目标是将合成数据与我的数据进行图表比较,看看它们有多大差异。如有任何帮助,我们将不胜感激。

我尝试使用 rnorm 创建数据,但毫不奇怪,对一项统计数据的任何调整都会改变其他统计数据。像 simpop 和 Synthpop 这样的包需要现有的数据集。

r replication synthetic
1个回答
0
投票

我过去制作了合成数据集并使用分布函数作为基础,请查看

?stats::distributions
了解 R stats 中的函数范围。

这里我使用

rnorm()
来获得围绕均值和标准差的正态分布。然后我减去\除初始 Q1\median\Q3 并加\乘所需的 Q1\median\Q3。然后将值限制在最小值和最大值。最后,我将 q3 和初始最大值之间的数据拉伸到 q3 和所需最大值 1 之间。

缺点\潜在的改进:

  • 将最小值限制为 0,会产生大约 50 个“零”值记录;这些可以更好地放置在数据集中的其他位置,可能有助于转变......
  • 请求平均值 = 0.1853,合成平均值 = 0.2109
  • 请求的 sd = 0.0831,合成的 sd = 0.1214862

代码:

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)

© www.soinside.com 2019 - 2024. All rights reserved.