Usando deslocamento no modelo binomial para explicar o aumento do número de pacientes

18

Duas perguntas relacionadas de mim. Eu tenho um quadro de dados que contém o número de pacientes em uma coluna (intervalo de 10 a 17 pacientes) e 0s e 1s mostrando se um incidente aconteceu naquele dia. Estou usando um modelo binomial para regredir a probabilidade de incidente no número de pacientes. No entanto, gostaria de ajustar o fato de que, quando houver mais pacientes, inevitavelmente haverá mais incidentes, porque a quantidade total de tempo do paciente na enfermaria é maior naquele dia.

Então, eu estou usando um modelo binomial de deslocamento como este (código R):

glm(Incident~Numbers, offset=Numbers, family=binomial, data=threatdata)

Minhas perguntas são:

  1. Tudo bem ter exatamente as mesmas variáveis ​​prevendo e no deslocamento? Quero parcial do aumento tônico na probabilidade de incidentes e ver se resta alguma coisa, essencialmente. Faz sentido para mim, mas sou um pouco cauteloso caso esteja errado.

  2. O deslocamento foi especificado corretamente? Eu sei que nos modelos de Poisson seria lido

    offset=log(Numbers)
    

Não sei se existe um equivalente aqui e não consigo encontrar nenhuma compensação binomial com o Google (o maior problema é que eu continuo recebendo binomial negativo, o que obviamente não é bom).

Chris Beeley
fonte
2
Não é o que você deseja ajustar, exatamente o que deseja medir - ou seja, como a probabilidade de "incidente" aumenta com o número de pacientes?
28412 B_Miner
1
Eu preciso ecoar o ponto de B_Miner. Acho que você está confuso quando / por que o deslocamento é usado nessa situação. Seu modelo, sem deslocamento, fornecerá valores adequados para a probabilidade de incidente em função do número de pacientes. Se você estiver interessado em uma forma funcional diferente, considere transformações (como log ou exponenciação de #) com base no que é cientificamente interessante.
Adamo
Você pode esclarecer algo sobre os incidentes? Há um incidente relacionado a um paciente ou algo sobre a enfermaria como um todo? Se relacionado a pacientes, é possível que haja> 1 incidente Se não houver pacientes, é impossível ter um incidente?
atiretoo 30/08/12
1
Aparentemente, minha resposta 'não contém detalhes suficientes'. Forneci um desenvolvimento teórico, um código executável e respostas para as duas perguntas. Talvez você possa esclarecer o que mais é necessário?
conjugateprior
1
Desculpe, Conjugado Anterior, sua resposta é ótima. A coisa "detalhe insuficiente" foi a tag adicionada à recompensa (ou seja, estava lá antes de você postar). Aceito quando a recompensa termina caso alguém produza uma resposta ainda melhor, mas isso é improvável e a sua é muito útil, obrigado.
31812 Chris Beeley

Respostas:

17

Se você está interessado na probabilidade de um incidente dado N dias de pacientes na enfermaria, deseja um modelo como:

mod1 <- glm(incident ~ 1, offset=patients.on.ward, family=binomial)

o deslocamento representa tentativas, incidenté 0 ou 1, e a probabilidade de um incidente é constante (sem heterogeneidade na tendência de gerar incidentes) e os pacientes não interagem para causar incidentes (sem contágio). Como alternativa, se a chance de um incidente for pequena, qual é para você (ou você limitou o número de incidentes sem mencionar isso para nós), então você pode preferir a formulação de Poisson

log.patients.on.ward <- log(patients.on.ward)
mod2 <- glm(incident ~ 1, offset=log.patients.on.ward, family=poisson)

onde as mesmas premissas se aplicam. O deslocamento é registrado porque o número de pacientes na enfermaria tem um efeito proporcional / multiplicativo.

Expandindo o segundo modelo, talvez você ache que há mais incidentes do que seria esperado, simplesmente devido ao aumento do número de pacientes. Ou seja, talvez os pacientes interajam ou sejam heterogêneos. Então você tenta

mod3 <- glm(incident ~ 1 + log.patients.on.ward, family=poisson)

Se o coeficiente ligado log.patients.on.wardfor significativamente diferente de 1, onde foi fixado mod2, algo pode estar errado com suas suposições de não heterogeneidade e sem contágio. E, embora você não possa, é claro, distinguir essas duas (nem uma das outras variáveis ​​ausentes), agora você tem uma estimativa de quanto o aumento do número de pacientes na enfermaria aumenta a taxa / probabilidade de um incidente acima do que você esperar do acaso. No espaço de parâmetros, é 1-coef(mod3)[2]com intervalo derivável de confint.

Como alternativa, você pode trabalhar diretamente com a quantidade do log e seu coeficiente. Se você quiser apenas prever a probabilidade de um incidente usando o número de pacientes na enfermaria, esse modelo seria uma maneira simples de fazê-lo.

As questões

  1. Tudo bem ter variáveis ​​dependentes no seu deslocamento? Parece uma péssima ideia para mim, mas não vejo que você precise.

  2. O deslocamento nos modelos de regressão de Poisson para exposureé de fato log(exposure). Talvez, de maneira confusa, o uso offsetnos modelos de regressão binomial de R seja basicamente uma maneira de indicar o número de tentativas. Ele sempre pode ser substituído por uma variável dependente definida como cbind(incidents, patients.on.ward-incidents)e sem deslocamento. Pense assim: no modelo de Poisson, ele entra no lado direito, atrás da função de link de log, e no modelo binomial, no lado esquerdo, em frente à função de link de logit.

conjugado
fonte
18

Compensações em regressões de Poisson

Vamos começar examinando por que usamos um deslocamento em uma regressão de Poisson. Muitas vezes, queremos isso para controlar a exposição. Seja a taxa de referência por unidade de exposição e t o tempo de exposição nas mesmas unidades. O número esperado de eventos será λ × t .λtλ×t

Em um modelo GLM, estamos modelando o valor esperado usando uma função de link , que ég

g(λtEu)=registro(λtEu)=β0 0+β1x1,Eu+...

tEuEuxEuEu

Podemos simplificar simplificando a expressão acima

registro(λ)=registro(tEu)+β0 0+β1x1,Eu+...

registro(tEu)

Regressão binomial

Em uma regressão binomial, que normalmente usa um link de logit, ou seja:

g(pEu)=logit(pEu)=euog(pEu1-pEu)=β0 0+β1x1,Eu+...

pEu

pEuEu

pEu,jjEuEuj=1NEu(1-pEu,j)NEuEu

pEu=1-j=1NEu(1-pEu,j).

pEu=1-(q)NEu,
q=1-pp

pEug(pEu)registro((q)-N-1)

Como resultado, não podemos usar um deslocamento neste caso.

p

Rider_X
fonte
2
+1, bem-vindo ao site, @Rider_X. Espero que possamos esperar mais respostas desse tipo no futuro.
gung - Restabelece Monica
1
@gung - Obrigado! Eu não tinha ouvido muito de volta sobre o que achava ser uma resposta útil, por isso não voltei muito. Vou ter que mudar isso. Saudações.
Rider_X
2
+1 Eu realmente aprecio respostas que explicam a teoria e o raciocínio, em vez de (ou além de) mostrar qual código e comandos usar.
whuber
9

Essa resposta vem em duas partes, a primeira uma resposta direta à pergunta e a segunda um comentário sobre o modelo que você está propondo.

A primeira parte refere-se ao uso de Numberscomo deslocamento, além de tê-lo nos rhs da equação. O efeito de fazer isso será simplesmente subtrair 1 do coeficiente estimado de Numbers, revertendo assim o efeito do deslocamento e, de outra forma, não alterará os resultados. O exemplo a seguir, com algumas linhas de saída irrelevante removidas, demonstra isso:

library(MASS)
Numbers <- rpois(100,12)
p <- 1 / (1 + exp(0.25*Numbers))
y <- rbinom(100, Numbers, p)
Incident <- pmin(y, 1) 

> summary(glm(Incident~Numbers, family="binomial"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3121  -1.0246  -0.8731   1.2512   1.7465  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  0.99299    0.80624   1.232   0.2181  
Numbers     -0.11364    0.06585  -1.726   0.0844 . <= COEFFICIENT WITH NO OFFSET TERM
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 135.37  on 99  degrees of freedom
Residual deviance: 132.24  on 98  degrees of freedom
AIC: 136.24

> summary(glm(Incident~Numbers, offset=Numbers, family="binomial"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3121  -1.0246  -0.8731   1.2512   1.7465  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.99299    0.80624   1.232    0.218    
Numbers     -1.11364    0.06585 -16.911   <2e-16 *** <= COEFFICIENT WITH OFFSET TERM
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 342.48  on 99  degrees of freedom
Residual deviance: 132.24  on 98  degrees of freedom
AIC: 136.24

Observe como tudo é o mesmo, exceto o coeficiente de números e o desvio nulo (e a estatística t, porque ainda está testando contra 0 em vez de -1).

t1-(1-pt)NtNttpttregistro(1-(1-pt)Nt)/Ntregistro(1-pt)tNtNt

Pode-se também suspeitar que a probabilidade por paciente varia de paciente para paciente, o que levaria a um modelo hierárquico mais complexo, mas não vou abordar isso aqui.

De qualquer forma, dado esse e o intervalo limitado do número de pacientes que você observa, em vez de usar um modelo linear na escala logit, talvez seja melhor não ser paramétrico sobre o relacionamento e agrupar o número de pacientes em três ou mais pacientes. quatro grupos, por exemplo, 10-11, 12-13, 14-15 e 16-17, constroem variáveis ​​fictícias para esses grupos e executam a regressão logística com as variáveis ​​fictícias no lado direito. Isso permitirá melhor a captura de relacionamentos não lineares, como "o sistema está sobrecarregado em torno de 16 pacientes e os incidentes começam a aumentar significativamente". Se você tiver uma gama muito maior de pacientes, sugiro um modelo aditivo generalizado, por exemplo, 'gam' do pacote 'mgcv'.

jbowman
fonte
0

Parece mais simples especificar um link de log e manter o deslocamento como no modelo de Poisson.

uma parada
fonte
2
Tenho certeza que você está certo, mas para meu benefício, como isso é um Poisson? Parece que o OP tem um conjunto de dados com um resultado binário. Seria isso glm (incidente ~ números, deslocamento = log (números), família = poisson, dados = dados da ameaça) ??
28412 B_Miner