I have two groups, Group 1 and Group 2, where the distribution of
var is quite different. However, Group 1 has much more people than Group 2, and the support of Group 2 is a subset of the support of Group 1. That is, for every person in Group 2 with a given value of
var, I would expect there to be a person with nearly the same value in Group 1. Here is an example:
require(ggplot2) group1 <- rnorm(n = 8E4, mean =2, sd= 5) group2 <- c ( rnorm(n = 5E3,mean =-2, sd= 0.5), rnorm(n=5E3, mean = 1, sd = 0.5)) label <- factor(c(rep("group1", 8E4), rep("group2", 1E4))) var = c(group1,group2) mydata <- data.frame(var,label) ggplot(mydata, aes(x = var , fill=label)) + geom_histogram( position="identity", alpha=0.5 , bins = 100 )
I would like to find a subset of Group 1 that has the same distribution of Group 2. I did so quite simply by using a simple histogram based density estimator, I estimate the density of the two distributions, and then sample from group 1 accordingly:
var_cut <- cut(var,breaks = 100) #Simple density estimators p_density<- table(var_cut[label == "group1"])/length(group1) q_density<- table(var_cut[label == "group2"])/length(group2) #Evaluate density of both distribution at each point of group 1 p <- p_density[var_cut[label == "group1"]] q <- q_density[var_cut[label=="group1"]] matching_idx <- sample(which(label == "group1"),sum(label=="group2"), FALSE, q/p ) #plot it mydata$matching_vec <- rep(NA, nrow(mydata)) mydata$matching_vec[matching_idx] <- "group1 (matching)" mydata$matching_vec[label == "group2"] <- "group2" mydata$matching_vec <- factor(mydata$matching_vec) ggplot(subset(mydata, !is.na(matching_vec))) + aes(x = var , fill=matching_vec) + geom_histogram( position="identity", alpha=0.5 , bins = 100 )
What is this called? Are there any theoretical results about this sort of process? Although it seemed to work pretty nicely, it is not perfect--I would love to better understand the theoretical implications of what empirically makes sense.