MatchIt 包:结合 "nearest neighbor" 匹配和 "exact" 匹配
MatchIt Package: Combining "nearest neighbor" matching and "exact" matching
我正在尝试使用 R 中的 MatchIt
包进行 PSM 分析,对某些变量使用 "exact matching",对同一数据集中的其他变量使用 "nearest neighbor" 方法
为了这个问题的目的,我将使用示例数据集lalonde
。
test = matchit(treat ~ age + educ + married, method = "nearest",
exact = c(married), data = lalonde)
我预计此代码将对变量 married
(具有 0
和 1
的二进制变量)执行精确匹配,然后对所有变量执行 "nearest" 匹配模型中的其他变量。
但是,我收到以下警告消息:
Warning message: Exact variables not contained in data. Exact matching
not done.
查看matchit
输出的总结,只使用了"nearest"方法。我不知道错误在哪里,因为仅使用 "exact" 方法,该函数确定了完全匹配,但没有与其他匹配方法结合使用。
你知道如何在同一数据集中组合 "exact" 匹配和 "nearest neighbor" 匹配吗?或者知道我的错误在哪里?
发生的事情是你在包的最近邻居文件中遇到了这个循环:
## Now for exact matching within nearest neighbor
## exact should not equal T for this type of matching--that would get sent to matchit2exact
if (!is.null(exact)){
if(!sum(exact%in%names(data))==length(exact)) {
warning("Exact variables not contained in data. Exact matching not done.",call.=FALSE)
exact=NULL
}
else {
ww <- exact%in%dimnames(X)[[2]]
nw <- length(exact)
exact <- data[,exact,drop=F]
if(sum(ww)!=nw){
X <- cbind(X,exact[!ww])
}
}
}
我认为这是由于您指定的方式所致 married
。
以下版本不会抛出错误:
test = matchit(treat ~ age + educ + married, method = "nearest",
exact = "married", data = lalonde)
我正在尝试使用 R 中的 MatchIt
包进行 PSM 分析,对某些变量使用 "exact matching",对同一数据集中的其他变量使用 "nearest neighbor" 方法
为了这个问题的目的,我将使用示例数据集lalonde
。
test = matchit(treat ~ age + educ + married, method = "nearest",
exact = c(married), data = lalonde)
我预计此代码将对变量 married
(具有 0
和 1
的二进制变量)执行精确匹配,然后对所有变量执行 "nearest" 匹配模型中的其他变量。
但是,我收到以下警告消息:
Warning message: Exact variables not contained in data. Exact matching not done.
查看matchit
输出的总结,只使用了"nearest"方法。我不知道错误在哪里,因为仅使用 "exact" 方法,该函数确定了完全匹配,但没有与其他匹配方法结合使用。
你知道如何在同一数据集中组合 "exact" 匹配和 "nearest neighbor" 匹配吗?或者知道我的错误在哪里?
发生的事情是你在包的最近邻居文件中遇到了这个循环:
## Now for exact matching within nearest neighbor
## exact should not equal T for this type of matching--that would get sent to matchit2exact
if (!is.null(exact)){
if(!sum(exact%in%names(data))==length(exact)) {
warning("Exact variables not contained in data. Exact matching not done.",call.=FALSE)
exact=NULL
}
else {
ww <- exact%in%dimnames(X)[[2]]
nw <- length(exact)
exact <- data[,exact,drop=F]
if(sum(ww)!=nw){
X <- cbind(X,exact[!ww])
}
}
}
我认为这是由于您指定的方式所致 married
。
以下版本不会抛出错误:
test = matchit(treat ~ age + educ + married, method = "nearest",
exact = "married", data = lalonde)