R中的多级采样

机器算法验证 r 采样
2022-04-03 03:38:52

我有一个类似的数据集:

pat_id   epis Care Type
1       1722650 Acute Care
1       1723120 Rehabilitation care
2       1584309 Acute Care
2       1585705 Rehabilitation care
3       1726487 GEM
3       1664031 Acute Care
3       1726488 Acute Care
3       1726489 Rehabilitation care

每个患者都有多个“发作/护理类型”。我想对 50 名患者进行抽样,但也与人群中的“护理类型”大致成比例(例如,50% 的急性护理、30% 的康复护理、20% 的 GEM)。

我想到的一种方法是将数据集拆分为“acute”、“rehab”和“gem”,然后从“acute”中抽取 25 个样本,从“rehab”中抽取 15 个样本,从“gem”中抽取 10 个样本。但是使用这种方法会有重叠“例如,患者 1375 将处于宝石、急性和康复中。

是否有可以轻松处理这种采样的 R 包?

3个回答

是的,采样包处理这个,你可以进行整群抽样或分层或其他一些: http ://cran.r-project.org/web/packages/sampling/sampling.pdf

然后,它还可以处理许多特殊的方差估计技术,您必须对您从复杂设计中计算出的任何指标进行处理。但是,我更喜欢 Lumley 的调查包。

我认为该任务不需要额外的包,只需使用基本sample功能,例如:

从第一组中获取样本:

sample <- sample(data[data$"Care Type" == "Acute Care",], size = 25)

从 orig 中获取选择的 ID。数据集(在此之前进行备份可能是个好主意):

data <- data[setdiff(data$pat_id, sample_pat_id),]

从其余数据集中的第二组中获取样本并连接到样本:

sample <- rbind(sample, sample(data[(data$"Care Type" == "Acute Care"),], size = 25)

对每个段重复:

data <- data[setdiff(data$pat_id, sample_pat_id),]
sample <- rbind(sample, sample(data[(data$"Care Type" == "?"),], size = ?)

对不起,没有测试,但我认为可以看到这一点。而且:我相信上面的代码可以改进和缩小。

我要做的是prob根据变量中的级别数为每个数据点提供权重参数。例子:

df <- data.frame(oks = sample(100),
        grp = c(rep("trt1", times = 30), rep("trt2", times = 70)))

> head(df)
  oks  grp
1  40 trt1
2  29 trt1
3  12 trt1
4  25 trt1
5  19 trt1
6  45 trt1

明显地:

> (df.prob <- table(df$grp))

trt1 trt2 
  30   70 

您将概率向量传递给sample您可以data.frame按所需变量对您的变量进行排序(并使用此处提供的解决方案的调整),或者您可以根据处理级别为各个行分配权重(此处未介绍,但重新编码应该不会太难)。

df[sample(x = df$oks, size = 30, prob = rep(df.prob/nrow(df), df.prob)), ] # / by nrow(df) to get appropriate weight per treatment

这是您正在寻找的近似比率,对吗?

> table(df[sample(x = df$oks, size = 30, prob = rep(df.prob/nrow(df), df.prob)), ]$grp)

trt1 trt2 
  12   18