【发布时间】:2021-03-26 17:00:22
【问题描述】:
我想模拟一些不平衡的集群数据。聚类数为 20,平均观测数为 30。但是,我想为每个聚类创建一个不平衡的聚类数据,其中的观测数比指定的多 10%(即 33 而不是 30)。然后,我想随机排除适当数量的观察值(即 60 个),以达到每个集群指定的平均观察值数量(即 30 个)。在每个集群中排除观察的概率并不统一(即,一些集群没有删除案例,而其他集群则排除了更多)。因此,最后我仍然总共有 600 个观察值。任何人都知道如何在 R 中实现这一点?这是一个较小的示例数据集。每个集群的观察次数不符合上面指定的条件,我只是用这个来表达我的想法。
> y <- rnorm(20)
> x <- rnorm(20)
> z <- rep(1:5, 4)
> w <- rep(1:4, each=5)
> df <- data.frame(id=z,cluster=w,x=x,y=y) #this is a balanced dataset
> df
id cluster x y
1 1 1 0.30003855 0.65325768
2 2 1 -1.00563626 -0.12270866
3 3 1 0.01925927 -0.41367651
4 4 1 -1.07742065 -2.64314895
5 5 1 0.71270333 -0.09294102
6 1 2 1.08477509 0.43028470
7 2 2 -2.22498770 0.53539884
8 3 2 1.23569346 -0.55527835
9 4 2 -1.24104450 1.77950291
10 5 2 0.45476927 0.28642442
11 1 3 0.65990264 0.12631586
12 2 3 -0.19988983 1.27226678
13 3 3 -0.64511396 -0.71846622
14 4 3 0.16532102 -0.45033862
15 5 3 0.43881870 2.39745248
16 1 4 0.88330282 0.01112919
17 2 4 -2.05233698 1.63356842
18 3 4 -1.63637927 -1.43850664
19 4 4 1.43040234 -0.19051680
20 5 4 1.04662885 0.37842390
随机添加和删除一些数据后,不平衡的数据变成这样:
id cluster x y
1 1 1 0.895 -0.659
2 2 1 -0.160 -0.366
3 1 2 -0.528 -0.294
4 2 2 -0.919 0.362
5 3 2 -0.901 -0.467
6 1 3 0.275 0.134
7 2 3 0.423 0.534
8 3 3 0.929 -0.953
9 4 3 1.67 0.668
10 5 3 0.286 0.0872
11 1 4 -0.373 -0.109
12 2 4 0.289 0.299
13 3 4 -1.43 -0.677
14 4 4 -0.884 1.70
15 5 4 1.12 0.386
16 1 5 -0.723 0.247
17 2 5 0.463 -2.59
18 3 5 0.234 0.893
19 4 5 -0.313 -1.96
20 5 5 0.848 -0.0613
编辑
这部分问题解决了(归功于 jay.sf)。接下来,我想重复这个过程 1000 次并对每个生成的数据集运行回归。但是,我不想在整个数据集上运行回归,而是在一些选定的集群上运行随机选择的集群(可以使用这个函数:df[unlist(cluster[sample.int(k, k, replace = TRUE)], use.names = TRUE), ]。最后,我想从这 1000 个中获得置信区间回归。如何进行?
【问题讨论】:
标签: r simulation data-manipulation data-generation