r - designmatch 包输出 1:2 匹配
问题描述
我正在尝试使用 designmatch 包将处理组(n = 88)与两个未处理的控制进行基数匹配。输出返回 88x3=264 group_id 和 88 t_id,但只有 88 c_id(而不是 88x2=176)。我知道 designmatch 默认不使用替换,所以我不明白为什么我只得到 88 c_id。
out <- bmatch(t_ind = t_ind, near_exact = near_exact, n_controls=2)
out
$obj_total
[1] -88
$obj_dist_mat
NULL
$t_id
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
[44] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
[87] 87 88
$c_id
[1] 108 308 279 131 220 147 231 437 194 278 153 445 383 290 482 105 241 335 238 202 289 301 323 312 159 262 176 315 443 200 377 393
[33] 885 581 927 398 217 117 240 448 263 554 525 854 169 352 317 119 386 414 518 477 424 469 280 286 297 513 316 97 936 609 387 455
[65] 168 702 284 432 349 379 446 543 552 293 851 185 713 501 232 641 997 561 499 310 485 466 675 647
$group_id
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
[44] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
[87] 87 88 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21
[130] 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42
[173] 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55 56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64
[216] 64 65 65 66 66 67 67 68 68 69 69 70 70 71 71 72 72 73 73 74 74 75 75 76 76 77 77 78 78 79 79 80 80 81 81 82 82 83 83 84 84 85 85
[259] 86 86 87 87 88 88
谢谢你的帮助
解决方案
回答
该功能似乎无法正常工作,因此这可能是不可能的。该软件包似乎也没有得到积极维护。我的建议是转向不同的包,例如MatchIt
.
细节
我对包的源代码进行了广泛的查看。我做了几个观察。
- 输出中的
group_id
元素似乎不基于任何东西。
在输出中,您确实看到group_id
它似乎具有正确的尺寸。但是,这些数字似乎没有任何意义:
group_id_t = 1:(length(t_id))
group_id_c = sort(rep(1:(length(t_id)), n_controls))
group_id = c(group_id_t, group_id_c)
如您所见,他们只是创建了一个group_id_t
从 1 到length(t_id)
(处理组的 ID,请参见t_id
输出)的向量。接下来,他们创建了一个group_id_c
完全相同的向量,只是重复了n_controls
几次。决赛group_id
只是它的串联版本。
我四处寻找一个可以输入的矩阵,或者一个行/列数与group_id
. 我找不到一个。里面的数字group_id
似乎没有任何价值。
- 优化器似乎优化
n_controls
或更少
该bmatch
函数有几个步骤。首先,它计算一些初始参数。其次,它将这些参数放在优化器中(在默认情况下:glpk
使用Rglpk::Rglpk_solve_LP
)。第三,它会进行一些计算来创建输出。
当您改变n_controls
(1、2、10 等)时,它仅更改初始参数中的 1 个参数 ( bvec
)。该参数本质上携带有关应找到多少匹配项的信息,然后将其作为约束输入到优化器中。但是,我得到的印象是bvec
. 它与条件一起输入<=
,这意味着优化器只需找到您获得n_controls
或更少的解决方案。我尝试更深入地研究初始参数是如何确定的,但那是几百行代码,所以我放弃了。
最后的想法
该软件包最后一次更新是在 2018-06-18,这表明作者已经有一段时间没有看它了。你可以/应该联系他们,看看他们怎么说。或者,还有其他类似的软件包MatchIt
已经过广泛验证。您也可以改用其中一个包。
推荐阅读
- python - python - scrapy,一一打印
- javascript - 如何使用 Google 跟踪代码管理器 HTML 标记中的循环动态填充数组?- 销售队伍营销云收集器标签
- zapier - Zapier CLI:当依赖字段更改时,如何清除输入字段的值?
- angular - 为什么我的 HTTP 授权标头中删除了“承载”一词
- jquery - Mapkit JS:显示更大的源和目标图标并禁用单击
- python - 为什么我不能使用 cv2.split 结果作为 cv2.bitwise_and 的掩码?
- android - Android Emulator 无法从命令行和 AVD 管理器在 MAC 上打开
- android - 是否可以在同一个应用程序中拥有多个媒体浏览器服务?
- linux - 没有ROOT访问权限的进程可以改变它的兄弟亲和性吗?
- firebase - SwiftUI @Published 变量未更新