У меня есть некоторые данные для подбора сырых и скорректированных логитов GAM:
library(mgcv)
## Simulate some data...
set.seed(3);n<-400
dat <- gamSim(1,n=n)
mu <- binomial()$linkinv(dat$f/4-2)
phi <- .5
a <- mu*phi;b <- phi - a;
dat$y <- rbeta(n,a,b)
## Fitting GAMs
crude <- gam(y~s(x0),family=binomial(link="logit"),data=dat)
adj <- gam(y~s(x0)+s(x1)+s(x2)+s(x3),family=binomial(link="logit"),data=dat)
Теперь я бы перехватил значение x0
с коэффициентом шансов (ИЛИ) 1,00 (т.е. вероятность 0,50). Для этого я использую visreg
с аргументом plot = FALSE
.
## Prepare data for ggplotting
library(visreg)
p.crude <- visreg(crude, "x0", plot = FALSE)
p.adj <- visreg(adj, "x0", plot = FALSE)
library(dplyr)
bind_rows(
mutate(p.crude$fit, Model = "crude"),
mutate(p.adj$fit, Model = "adj")
) -> fits
Ok. Я собираюсь вычислить ИЛИ из LogOR. Правильный ли следующий код?
# Compute ORs and CI from LogOR
fits$or <- exp(fits$visregFit)
fits$ci.low <- exp(fits$visregLwr)
fits$ci.up <- exp(fits$visregUpr)
Теперь я использую approx
для интерполяции значения x0
с ИЛИ 1.00
## Interpolate x0 which give OR 1.00 (or 50% of probability)
x.crude <- round(approx(x = crude$fitted.values, y=crude$model$x0, xout = .5)$y, 1)
x.adj <- round(approx(x = adj$fitted.values, y=adj$model$x0, xout = .5)$y, 1)
Наконец, я строю две модели на одном графике:
## Plotting using ggplot
library(ggplot2)
ggplot(data = fits) +
geom_vline(aes(xintercept = x.crude), size=.2, color="black")+
geom_vline(aes(xintercept = x.adj), size=.2, color="red")+
annotate(geom ="text", x= x.crude - 0.05, y=.5, label = x.crude, size=3.5) +
annotate(geom ="text", x= x.adj - 0.05, y=.5, label = x.adj, size=3.5, color="red") +
geom_ribbon(aes(x0, ymin=ci.low, ymax=ci.up, group=Model, fill=Model), alpha=.05) +
geom_line(aes(x0, or, group=Model, color=Model)) +
labs(x="X0", y="Odds ratio")+
theme_bw(16)
Как видите, только грубая модель показывает перехват с OR, почти равным 1,00 (x0 = 0,9), в то время как для вспомогательной модели этого не происходит.
Во-первых, как я могу получить интерполяцию с ИЛИ, которая точно в 1?
Во-вторых ... С ограничением моих статистических знаний я понял, что должен был наблюдать перехват с OR = 1 для смежной модели, а также на основе наблюдаемых значений для x0
в соответствии с этой моделью. Почему относительная кривая настроена вверх?