Assíntotas de regressão binomial


8

A regressão logística binomial possui assíntotas superiores e inferiores de 1 e 0, respectivamente. No entanto, os dados de precisão (apenas como exemplo) podem ter assíntotas superiores e inferiores muito diferentes de 1 e / ou 0. Posso ver três soluções possíveis para isso:

  1. Não se preocupe se você estiver tendo bons ajustes na área de interesse. Se você não está obtendo bons ajustes, então:
  2. Transforme os dados para que o número mínimo e máximo de respostas corretas na amostra forneça proporções de 0 e 1 (em vez de dizer 0 e 0,15).
    ou
  3. Use a regressão não linear para poder especificar as assíntotas ou solicitar que o instalador faça isso por você.

Parece-me que as opções 1 e 2 seriam preferidas à opção 3, em grande parte por motivos de simplicidade; nesse caso, a opção 3 é talvez a melhor opção, pois pode gerar mais informações?

edit
Aqui está um exemplo. O total possível de precisão possível é 100, mas a precisão máxima nesse caso é ~ 15.

accuracy <- c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)
x<-1:length(accuracy)
glmx<-glm(cbind(accuracy, 100-accuracy) ~ x, family=binomial)
ndf<- data.frame(x=x)
ndf$fit<-predict(glmx, newdata=ndf, type="response")
plot(accuracy/100 ~ x)
with(ndf, lines(fit ~ x))

A opção 2 (conforme comentários e para esclarecer meu significado) seria então o modelo

glmx2<-glm(cbind(accuracy, 16-accuracy) ~ x, family=binomial)

A opção 3 (para completar) seria algo semelhante a:

fitnls<-nls(accuracy ~ upAsym + (y0 - upAsym)/(1 + (x/midPoint)^slope), 
  start = list("upAsym" = max(accuracy), "y0" = 0, "midPoint" = 10, "slope" = 5), 
  lower = list("upAsym" = 0, "y0" = 0, "midPoint" = 1, "slope" = 0), 
  upper = list("upAsym" = 100, "y0" = 0, "midPoint" = 19, hillslope = Inf), 
  control = nls.control(warnOnly = TRUE, maxiter=1000),
  algorithm = "port")

Por que há um problema aqui? A regressão logística postula que o logit (log odds) da probabilidade tem uma relação linear com as variáveis ​​explicativas. O intervalo válido de probabilidades de log é todo o conjunto de números reais; não há possibilidade de ir além deles!
whuber

Digamos, por exemplo, que haja uma assíntota superior de probabilidade correta de 0,15. A regressão é então mal ajustada aos dados. Vou colocar um exemplo.
Matt Albrecht

+1 ótima pergunta. Meu instinto seria usar 16 como o máximo em vez de 100 ( cbind(accuracy, 16-accuracy)), mas estou preocupado se isso é matematicamente justificado.
David Robinson

Respostas:


3

Pergunta interessante. Uma possibilidade que me vem à mente é incluir um parâmetro adicional para controlar o limite superior da função 'link'.p[0 0,1]

Deixe , j = 1 , . . . , n sejam observações independentes, onde y jBinomial { n i , p F ( x T j β ) } , p [ 0 , 1 ] , x j = ( 1 , x j 1 ,{xj,yj,nj}j=1,...,nyjBinomial{nEu,pF(xjTβ)}p[0 0,1] é um vector de variáveis explicativas, β = ( β 0 , . . . , Β k ) é um vector de coeficientes de regressão e F - 1 é a função de ligação. Então a função de probabilidade é dada porxj=(1,xj1,...,xjk)Tβ=(β0 0,...,βk)F-1

eu(β,p)j=1npyjF(xjTβ)yj[1-pF(xjTβ)]nj-yj

O próximo passo é escolher um link, digamos a distribuição logística e encontre o MLE correspondente de .(β,p)

Considere o exemplo seguinte brinquedo simulada usando um modelo de dose-resposta com e n = 31(β0 0,β1,p)=(0,5,0,5,0,25)n=31

dose = seq(-15,15,1)
a = 0.5
b = 0.5
n=length(dose)
sim = rep(0,n)
for(i in 1:n) sim[i] = rbinom(1,100,0.25*plogis(a+b*dose[i]))

plot(dose,sim/100)

lp = function(par){
if(par[3]>0& par[3]<1) return(-(n*mean(sim)*log(par[3]) +  sum(sim*log(plogis(par[1]+par[2]*dose)))  + sum((100-sim)*log(1-par[3]*plogis(par[1]+par[2]*dose))) ))
else return(-Inf)
}

optim(c(0.5,0.5,0.25),lp)

(β^0 0,β^1,p^)=(0.4526650,0.4589112,0,2395564)

Editar

Dada a edição (que altera significativamente o problema), o método que propus anteriormente pode ser modificado para ajustar os dados que você forneceu. Considere o modelo

precisão=pF(x;μ,σ),

Fμσp

rm(list=ls())
y = c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)/100
x = 1:length(y)
N = length(y)

plot(y ~ x)

Data = data.frame(x,y)

nls_fit = nls(y ~ p*plogis(x,m,s), Data, start = list(m = 10, s = 1,  p = 0.2) )

lines(Data$x, predict(nls_fit), col = "red")

1
Esta é uma abordagem interessante. Quais seriam as vantagens de usar esse método em uma função de regressão não linear de três parâmetros?
Matt Albrecht

p

2
O benefício seria a incorporação correta da variabilidade binomial.
Aniko

p(μ^,σ^,p^)=(8.5121,0,8987,0,1483)

2

Eu usaria o máximo do vetor X como o número total possível de sucessos. (Essa é uma estimativa tendenciosa do verdadeiro número máximo de sucessos, mas deve funcionar razoavelmente bem se você tiver dados suficientes).

accuracy <- c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)
x<-1:length(accuracy)
glmx<-glm(cbind(accuracy, max(accuracy)-accuracy) ~ x, family=binomial)
ndf<- data.frame(x=x)
ndf$fit<-predict(glmx, newdata=ndf, type="response")
plot(accuracy/max(accuracy) ~ x)
with(ndf, lines(fit ~ x))

Isso cria um gráfico que se parece com:

insira a descrição da imagem aqui


1

Observe que a regressão binomial é baseada em ter uma resposta binária para cada caso individual. cada resposta individual deve ser capaz de assumir um dos dois valores. Se houver algum limite para a proporção, também deve ter havido alguns casos que poderiam ter apenas um valor.

Parece que você não está lidando com dados binários, mas com dados em um intervalo finito. se for esse o caso, a regressão beta parece mais apropriada. Podemos escrever a distribuição beta como:

p(dEu|euvocêμEuϕ)=(dEu-eu)μEuϕ-1(você-dEu)(1-μEu)ϕ-1B(μEuϕ,(1-μEu)ϕ)(você-eu)ϕ-1

g(μEu)=xEuTβ[eu,você]yEu=dEu-euvocê-eu


Obrigado pela resposta. São dados compostos para simular uma série T | F totalizando 100 opções dicotômicas para cada ponto x. Portanto, os limites são 0 corretos ou 100 corretos, mas neste caso específico obtém aproximadamente 15 corretos. Usando o pacote betareg ... pacc <- precision / 100 + 0.00001; b1 <- betareg (pacc ~ x) ... me dá a mesma regressão de aparência que o binômio. É isso que você queria dizer? Ou você está sugerindo a imposição de um limite baseado em dados post-hoc? Nesse caso, o que distingue o beta do binomial quando ambos têm limites post-hoc?
27612 Matt Albrecht
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.