问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

R语言两种方法实现随机分层抽样

创作时间:
作者:
@小白创作中心

R语言两种方法实现随机分层抽样

引用
CSDN
1.
https://blog.csdn.net/dege857/article/details/138675019

随机分层抽样是一种常用的统计抽样方法,通过将数据按特征分层,然后在每个层次中抽取一定量的样本,可以有效减少数据分布的不平衡,提高样本的代表性。本文将介绍如何使用R语言中的sampling包和dplyr包实现随机分层抽样。

使用sampling包进行随机分层抽样

首先,我们需要导入数据和sampling包:

library(sampling)
bc <- read.csv("E:/r/test/demo.csv", sep=',', header=TRUE)

这个数据集包含了体检相关的信息,其中SEX变量表示性别。我们将根据性别进行分层抽样。

函数格式

sampling包中的strata函数用于实现分层抽样,其基本格式如下:

strata(data, stratanames=NULL, size, method=c("srswor","srswr","poisson",
"systematic"), pik,description=FALSE)
  • data:待抽样的数据集
  • stratanames:分层变量的名称
  • size:每层的样本量
  • method:抽样方法,包括不放回简单随机抽样(srswor)、放回简单随机抽样(srswr)、泊松抽样(poisson)和系统抽样(systematic)

示例代码

假设我们想按性别等比例抽取60%的样本:

n <- round(3/5 * nrow(bc) / 2)
sub_train <- strata(bc, stratanames="SEX", size=c(n, n), method="srswor")
table(sub_train$SEX)

如果想按不同比例抽取,例如男性190个,女性100个:

sub_train1 <- strata(bc, stratanames="SEX", size=c(190, 100), method="srswor")
table(sub_train1$SEX)

提取抽样后的数据:

data_train <- bc[sub_train$ID_unit, ]
data_test <- bc[-sub_train$ID_unit, ]

使用dplyr包进行随机分层抽样

dplyr包提供了更简洁的语法来实现分层抽样:

library(dplyr)

固定数量抽样

每组抽取固定数量250个:

strat <- bc %>% group_by(SEX) %>% slice_sample(n = 250)

按比例抽样

每组按一定比例抽样:

strat1 <- bc %>% group_by(SEX) %>% slice_sample(prop = 0.50)

dplyr包直接返回抽样后的数据,无需额外提取。

参考文献

  1. sampling包文档
  2. dplyr包文档
  3. https://blog.csdn.net/neweastsun/article/details/122395968
  4. https://blog.csdn.net/claroja/article/details/55096431
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号