Не понимаю, почему метод так не популярен в биомедицине.
suppressPackageStartupMessages({
library(tidyverse)
library(logistf)
})
set.seed(15321)
n <- 150
p1 <- 0.015
p2 <- 0.03
x <- rep(0:1, each = n)
probs <- rep(c(p1, p2), each = n)
sim <- function() {
df <- data.frame(
x = x,
y = rbinom(
n = n * 2, size = 1,
prob = probs
)
)
fit <- logistf(
y ~ x, data = df,
pl = TRUE, firth = TRUE
)
c(
n1 = sum(df$y[x == 0]),
n2 = sum(df$y[x == 1]),
beta = fit$coefficients[[2]],
lcl = fit$ci.lower[[2]],
ucl = fit$ci.upper[[2]],
lrt = 1 - pchisq(-2 * diff(fit$loglik), df = 1)
)
}
res <- replicate(10000, sim())
eff <- log((p2/(1 - p2))/(p1/(1 - p1)))
t(res) |>
as_tibble() |>
mutate(eff = eff) |>
summarise(
coverage = mean(between(eff, lcl, ucl)),
power = mean(lrt.null < 0.05),
`S-type` = mean(beta < 0 & lrt.null < 0.05),
mean = mean(beta),
true = mean(eff),
bias = mean - true
)