使用 R 或 tidyverse 调整数据框中的比例以匹配已知参数(使用 prop.table 或 table 或其他任何东西)

问题描述 投票:0回答:1

我正在研究通过非随机样本设计收集的心理评估数据。我的数据框由“性别”(男性和女性)和“教育程度”(“小学”、“高中”、“大学”)组成。然而,我的经验分布与真实分布不同。

我知道性别的真实参数是 0.7 女性和 0.3 男性。我也知道学校教育的真实参数是小学等于 0.5,高中等于 0.3,大学等于 0.2

我想要一个可以“剪切”(调整?)我的数据框以匹配这些特征的代码。我知道我的最终数据框的参与者将比当前的少。我想知道在这种情况下 for / 循环解决方案是否可行。

数据:

df2 = data.frame(
  sex = rep(c("m","f"),135),
  schooling = c("elementary","highschool","college")
)

prop.table(table(df2$sex))
prop.table(table(df2$schooling))
r loops for-loop iteration proportions
1个回答
0
投票

您可以按所需比例对观察结果进行加权,然后使用

dplyr::slice_sample()
:

set.seed(13)
library(dplyr)

prop_sex <- c(f = 0.7, m = 0.3)
prop_school <- c(elementary = 0.5, highschool = 0.3, college = 0.2)

df3 <- df2 %>%
  mutate(wt = prop_sex[sex] * prop_school[schooling]) %>%
  slice_sample(prop = 2/3, weight_by = wt)

prop.table(table(df3$sex))
#         f         m 
# 0.6055556 0.3944444

prop.table(table(df3$schooling))
#   college elementary highschool 
# 0.2777778  0.4111111  0.3111111 

根据您想要的精度级别,您可以迭代,直到比例落在目标的一定容差范围内。

© www.soinside.com 2019 - 2024. All rights reserved.