将 R 中的数据下采样到给定的分布
Down-Sample data in R to a given distribution
我有一个数据集,包括 60 个预测变量和一个指示是否发生购买以及花费了多少的因变量。我数据中的转化率为 3.5%,我想通过排除购买记录将其下采样到 2.5%。应保留原始分布。
感谢您的帮助!
比约恩.
首先,一些更简单的数据(2 列而不是 60 列)在 b
列中具有 3.5% TRUE
值:
library(tidyverse)
n <- 10000
df <- data.frame(
a = rnorm(n)) %>%
mutate(b = row_number() <= .035*n)
df %>%
summarize(mean(b))
mean(b)
1 0.035
一种缩减采样的方法是 rbind
a
中您想保留的所有 FALSE
值以及 TRUE
值的样本通过 sample_frac
:
减少目标数量
df2 <- rbind(
df %>% filter(!b),
df %>% filter(b) %>% sample_frac(.025/.035)
)
df2 %>%
summarize(mean(b))
mean(b)
1 0.02525253
您可能无法准确获得 2.5%,具体取决于您数据的原始大小,因为我们只能对整数进行采样。
我有一个数据集,包括 60 个预测变量和一个指示是否发生购买以及花费了多少的因变量。我数据中的转化率为 3.5%,我想通过排除购买记录将其下采样到 2.5%。应保留原始分布。
感谢您的帮助! 比约恩.
首先,一些更简单的数据(2 列而不是 60 列)在 b
列中具有 3.5% TRUE
值:
library(tidyverse)
n <- 10000
df <- data.frame(
a = rnorm(n)) %>%
mutate(b = row_number() <= .035*n)
df %>%
summarize(mean(b))
mean(b)
1 0.035
一种缩减采样的方法是 rbind
a
中您想保留的所有 FALSE
值以及 TRUE
值的样本通过 sample_frac
:
df2 <- rbind(
df %>% filter(!b),
df %>% filter(b) %>% sample_frac(.025/.035)
)
df2 %>%
summarize(mean(b))
mean(b)
1 0.02525253
您可能无法准确获得 2.5%,具体取决于您数据的原始大小,因为我们只能对整数进行采样。