如何在R中使用加权引导对数据进行重新采样?

时间:2018-07-03 11:21:59

标签: r

我想使用加权引导对数据进行重采样以构建随机森林。

情况就是这样。

我有由正常受试者(N=20000)和患者(N=500)组成的数据。

我对正常受试者(N=2000)和患者(n=500)进行了新的数据设置,因为我对受试者(N=2500)进行了一定的实验。

如您所见,正常受试者提取了原始数据的1/10,而患者则提取了所有原始数据。

因此,我应该权衡普通对象来执行机器学习算法。

请让我知道如何在R中引导体重。

谢谢。

1 个答案:

答案 0 :(得分:2)

听起来您确实需要分层重采样,而不是加权重采样。

您的数据被分为大小不同的两个不同的组,您希望将该结构保留在引导程序中。您没有说要对这些数据应用什么功能,所以让我们使用诸如均值的简单方法。

生成一些假数据,并采取(观察到的)手段:

controls <- rnorm(2000, mean = 10)
patients <- rnorm(500, mean = 9.7)

mean(controls)
mean(patients)

告诉R我们要执行200个引导程序,并设置两个空向量来存储每个引导程序样本的均值:

nbootraps <- 200
boot_controls <- numeric(nbootraps)
boot_patients <- numeric(nbootraps)

使用循环,我们可以绘制与原始样本相同大小的重样本,并计算每个样本的均值。

for(i in 1:nbootraps){
  # draw bootstrap sample
  new_controls <- controls[sample(1:2000, replace = TRUE)]
  new_patients <- patients[sample(1:500,  replace = TRUE)]

  # send the mean of each bootstrap sample to boot_ vectors
  boot_controls[i] <- mean(new_controls)
  boot_patients[i] <- mean(new_patients)
}

最后,为组均值绘制引导分布:

p1 <- hist(boot_controls)
p2 <- hist(boot_patients)

plot(p1, col=rgb(0,0,1,1/4), xlim = c(9.5,10.5), main="")
plot(p2, col=rgb(1,0,0,1/4), add=T)