Skip to content

Commit 9802c30

Browse files
committed
loosen criteria for correct compute pooled cov rank mahalanobis
1 parent 68afe5e commit 9802c30

1 file changed

Lines changed: 23 additions & 4 deletions

File tree

tests/testthat/test.rank.mahal.R

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,22 @@ test_that("Fix for #128 (`compute_rank_mahalanobis` ignores index argument) hold
126126

127127
})
128128

129+
is_scalar_multiple <- function(A, B) {
130+
# Ensure dimensions match
131+
if (!all(dim(A) == dim(B))) {
132+
return(FALSE)
133+
}
134+
135+
# Find positions where B is non-zero to avoid division by zero
136+
non_zero_positions <- B != 0
137+
138+
# Compute element-wise ratio where B != 0
139+
ratios <- A[non_zero_positions] / B[non_zero_positions]
140+
141+
# Check if all ratios are (approximately) equal
142+
return(all(abs(ratios - ratios[1]) < 1e-8))
143+
}
144+
129145
test_that("compute_pooled_cov_rank_mahalanobis results match ordinary Mahalanobis's", {
130146
## nr number of samples
131147
nr <- 10L
@@ -138,10 +154,13 @@ test_that("compute_pooled_cov_rank_mahalanobis results match ordinary Mahalanobi
138154
df[df$z == 0, 'X'] <- seq(1, by=2, len = nr / 2) # odds
139155
df[df$z == 1, 'X'] <- seq(2, by=2, len = nr / 2) # evens
140156

141-
expect_equivalent(match_on(z~., data=df, method="pooled_cov"),
142-
match_on(z~., data=df, method="mahalanobis"))
157+
A <- match_on(z~., data=df, method="pooled_cov")
158+
B <- match_on(z~., data=df, method="mahalanobis")
159+
# Check if all ratios are (approximately) equal
160+
expect_true(is_scalar_multiple(A, B))
143161

144162
ez <- exactMatch(z~., data=df)
145-
expect_equivalent(match_on(z~., data=df, method="pooled_cov", within=ez),
146-
match_on(z~., data=df, method="mahalanobis", within=ez))
163+
A <- match_on(z~., data=df, method="pooled_cov", within=ez)
164+
B <- match_on(z~., data=df, method="mahalanobis", within=ez)
165+
expect_true(is_scalar_multiple(A, B))
147166
})

0 commit comments

Comments
 (0)