如何在R中使用CEM包查找精确匹配
我试图使用R中的CEM库在我的数据集中找到精确的匹配项。这是我给出的数据集。 我正在使用以下代码,但在运行CEM函数以查找精确匹配时出错如何在R中使用CEM包查找精确匹配,r,R,我试图使用R中的CEM库在我的数据集中找到精确的匹配项。这是我给出的数据集。 我正在使用以下代码,但在运行CEM函数以查找精确匹配时出错 ##loading CEM Package for Exact Matching require(cem) Dataset_Patient <- read.csv(file.choose(), header = TRUE) ## Loading Dataset Le <- data.frame(na.omit(Dataset_Pati
##loading CEM Package for Exact Matching
require(cem)
Dataset_Patient <- read.csv(file.choose(), header = TRUE) ## Loading Dataset
Le <- data.frame(na.omit(Dataset_Patient)) ## Converting Dataset into Dataframe
str(Le) ## Check the Structure of Dataset as Variables
tr <- which(Le$TXA==0) ## Grouping the dataset according to TXA No / Yes
ct <- which(Le$TXA==1)
ntr <- length(tr)
nct <- length(ct)
## Calculate Mean to find out the difference
mean(Le$TXA[tr]) - mean(Le$TXA[ct])
mean(Le$Sex[tr]) - mean(Le$Sex[ct])
mean(Le$Age[tr]) - mean(Le$Age[ct])
mean(Le$HTN[tr]) - mean(Le$HTN[ct])
mean(Le$Pulmonary.HTN[tr]) - mean(Le$Pulmonary.HTN[ct])
mean(Le$Airway.diseases[tr]) - mean(Le$Airway.diseases[ct])
mean(Le$Malignancy[tr]) - mean(Le$Malignancy[ct])
mean(Le$Bleeding.disorders[tr]) - mean(Le$Bleeding.disorders[ct])
mean(Le$On.anticoagulants_antiplatelets[tr]) - mean(Le$On.anticoagulants_antiplatelets[ct])
mean(Le$Required.ICU.admission[tr]) - mean(Le$Required.ICU.admission[ct])
mean(Le$Classification.of.hemoptysis[tr]) - mean(Le$Classification.of.hemoptysis[ct])
mean(Le$Respiratory.support.[tr]) - mean(Le$Respiratory.support.[ct])
## selection of Columns in the Dataset for CEM Analysis and Matching
vars <- c("Sex", "Age", "Smooking", "HTN", "Pulmonary.HTN", "Airway.diseases", "Malignancy", "Bleeding.disorders", "On.anticoagulants_antiplatelets", "Required.ICU.admission","Classification.of.hemoptysis","Respiratory.support.")
imbalance(group=Le$TXA, data=Le[vars])
todrop <- c("TXA", "Age")
imbalance(group=Le$TXA, data=Le[vars], drop=todrop)
mat <- cem(treatment = "treated", data = Le, keep.all=TRUE)
mat
##加载CEM包以实现精确匹配
要求(cem)
数据集\u Patient问题在于,几乎没有高水平的SOFA.score
数据。这是SOFA.评分表TXA
# 0 1
# 0 53 2
# 1 63 0
# 2 66 1
# 3 20 0
# 4 22 1
# 5 27 1
# 6 21 2
# 7 16 0
# 8 10 0
# 9 12 0
# 10 8 1
# 11 5 1
# 12 4 1
# 13 2 0
# 14 1 0
# 15 1 0
# 16 1 0
# 19 0 1
如果更改SOFA.score
的默认切点,则可以解决以下问题:
mat <- cem(treatment = "TXA", data = Le[,c("TXA", "Age", "Smooking", "HTN",
"Airway.diseases", "Malignancy",
"Bleeding.disorders",
"On.anticoagulants_antiplatelets",
"Required.ICU.admission",
"Classification.of.hemoptysis",
"Respiratory.support.",
"SOFA.score")],
keep.all=TRUE, baseline.group="1",
cutpoints=list(SOFA.score=c(0, 4.5, 9.5, 14.5, 19.5)))
您可能需要调整其他变量的切点(特别是具有许多不同级别的变量),也可能需要调整SOFA.score
,以匹配更多情况
编辑:使用单个变量
要循环使用所有变量,可以执行以下操作:
vars <- c("Age", "Smooking", "HTN",
"Airway.diseases", "Malignancy",
"Bleeding.disorders",
"On.anticoagulants_antiplatelets",
"Required.ICU.admission",
"Classification.of.hemoptysis",
"Respiratory.support.",
"SOFA.score")
out <- lapply(seq_along(vars), function(i){
mtch <- cem(treatment = "TXA", data = Le[,c("TXA", vars[i])],
keep.all=TRUE, baseline.group="1",
cutpoints=list(SOFA.score=c(0, 4.5, 9.5, 14.5, 19.5)))
Le[mtch$matched, c("Record", "TXA", vars[i])]})
names(out) <- vars
vars给定您共享的代码,数据集中没有名为treated
的变量,因此我在调用cem()
时使用TXA
代替treated
。您得到一个错误,因为它找不到任何匹配项。在识别匹配案例的阶段,没有匹配案例,因此返回一长串NA
值。当函数试图使用这些参数来识别观测值时,它会抛出一个错误。嗨,bro@DaveArmstrong,我也用TXA变量对它进行了测试。处理过的变量不是此数据集的一部分。我收到以下错误。@DaveArmstrong在[.default
(tmp,x,bg)中出错:下标超出范围。另外:警告消息:在reduce.var(数据[[I]],切点[[vnames[I]])中:NAs由强制Davearmstrong引入谢谢兄弟,现在我的问题是,如果我想检查TXA与每个变量的匹配,我应该用单个变量重复此代码,还是有另一种方法使用循环自动逐个执行?检查TXA
与每个变量的匹配是什么意思?您可以找到e匹配矩阵Le[mat$matched,]
我的意思是,如果我想检查税收和年龄之间的匹配,那么我只需要删除代码中的所有其他变量,只保留代码中的这两个变量。接下来是性别和税收等。因此,我必须重复多次代码。有什么方法可以在代码中使用循环自动执行此操作吗?我希望如此你明白我的意思了。你可以,但是每一个都只匹配一个变量,其他变量都不匹配。我怀疑这是你想要的,或者是吗?是的,我的意思是单个变量
vars <- c("Age", "Smooking", "HTN",
"Airway.diseases", "Malignancy",
"Bleeding.disorders",
"On.anticoagulants_antiplatelets",
"Required.ICU.admission",
"Classification.of.hemoptysis",
"Respiratory.support.",
"SOFA.score")
out <- lapply(seq_along(vars), function(i){
mtch <- cem(treatment = "TXA", data = Le[,c("TXA", vars[i])],
keep.all=TRUE, baseline.group="1",
cutpoints=list(SOFA.score=c(0, 4.5, 9.5, 14.5, 19.5)))
Le[mtch$matched, c("Record", "TXA", vars[i])]})
names(out) <- vars