如何使用Sampling包在R中进行替换,通过簇(块采样)重新采样数据

时间:2016-05-08 17:47:30

标签: r cluster-analysis resampling

这是我的虚拟数据:

income <- as.data.frame.vector <- sample(1000:10000, 1000, replace=TRUE)
individuals <- as.data.frame.vector <- sample(1:50,1000,replace=TRUE)
datatest <- as.data.frame (cbind (income, individuals))

我知道我可以使用以下代码按单个行进行采样:

sample <- datatest[sample(nrow(datatest), replace=TRUE),]

现在,我想提取具有数据集的替换和相等概率的随机样本,但是使用相同的单个代码对完整的观察块进行采样。 请注意,有50个人,但有1000个观察。一些观察结果属于同一个体,因此我想通过个体(在这种情况下为聚类)进行抽样,而不是观察。我不介意提取的样本在观察数量上是否略有不同。我怎样才能做到这一点?

我试过了:

 library(sampling)
 samplecluster <- cluster (datatest, clustername=c("individuals"), size=50,
                           method="srswr")

但结果不是采样数据。我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

我不确定我是否遗漏了什么。如果您只是想要一些个人,可以创建一个较小的样本:

ind.sample <- sample(1:50, size = 10)
print(ind.sample)
# [1] 17 43 38 39 28 23 35 47  9 13
my.sample <- datatest[datatest$individuals %in% ind.sample) ,]
head(my.sample)
#    income individuals
#21    9072          17
#97    5928          35
#122   9130          43
#252   4388          43
#285   8083          28
#287   1065          35

我想更通用的方法是生成随机索引;

ind.unique <- unique(individuals)
ind.sample.index <- sample(1:length(ind.unique), size = 10)
ind.sample <- ind.unique[ind.sample.index]
print(ind.sample[order(ind.sample)])
my.sample <- datatest[datatest$individuals %in% ind.sample, ]
ind.counts <- aggregate(income ~ individuals, my.sample, FUN = length)
print(ind.counts)

答案 1 :(得分:2)

好吧,似乎我确实遗漏了一些东西。在cluster命令之后,您需要应用getdata命令(全部来自采样包)。这样我就可以得到我想要的样本,还有一些额外的列。

samplecluster <- cluster (datatest, clustername=c("personid"), size=50, method="srswr")

给你:

head(samplecluster)

individuals ID_unit Replicates    Prob
1        1     259          2 0.63583
2        1     178          2 0.63583
3        1     110          2 0.63583
4        1     153          2 0.63583
5        1     941          2 0.63583
6        1     667          2 0.63583

然后使用getdata,我还得到整个集群抽样收入的原始数据:

datasample <- getdata (datatest, samplecluster)

head(datasample)
  income individuals ID_unit Replicates   Prob
1   8567        1     259          2 0.63583
2   2701        1     178          2 0.63583
3   4998        1     110          2 0.63583
4   3556        1     153          2 0.63583
5   2893        1     941          2 0.63583
6   7581        1     667          2 0.63583

答案 2 :(得分:1)

我认为重要的是要注意数据集仍然需要扩展以包含所有重复项。

sw<-data.frame(datasample[rep(seq_len(dim(datasample)[1]), datasample$Replicates),,  drop = FALSE], row.names=NULL)

可能会对某人有所帮助