Asíntotas de regresión binomial


8

La regresión logística binomial tiene asíntotas superior e inferior de 1 y 0 respectivamente. Sin embargo, los datos de precisión (solo como ejemplo) pueden tener asíntotas superiores e inferiores muy diferentes a 1 y / o 0. Puedo ver tres posibles soluciones a esto:

  1. No se preocupe si obtiene buenos ajustes dentro del área de interés. Si no está obteniendo buenos ajustes, entonces:
  2. Transforme los datos de modo que el número mínimo y máximo de respuestas correctas en la muestra den proporciones de 0 y 1 (en lugar de decir 0 y 0.15).
    o
  3. Utilice la regresión no lineal para que pueda especificar las asíntotas o que el instalador lo haga por usted.

Me parece que las opciones 1 y 2 serían preferibles a la opción 3 en gran medida por razones de simplicidad, en cuyo caso la opción 3 es quizás la mejor opción porque puede proporcionar más información.

editar
Aquí hay un ejemplo. La precisión total posible para la precisión es 100, pero la precisión máxima en este caso es ~ 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))

La opción 2 (según los comentarios y para aclarar mi significado) sería el modelo

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

La opción 3 (para completar) sería algo similar 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 qué hay un problema aquí? La regresión logística postula que el logit (log odds) de la probabilidad tiene una relación lineal con las variables explicativas. El rango válido de probabilidades de registro es el conjunto completo de números reales; ¡no hay posibilidad de ir más allá de ellos!
whuber

Digamos, por ejemplo, que hay una asíntota superior de probabilidad correcta de 0.15. La regresión se ajusta mal a los datos. Voy a poner un ejemplo.
Matt Albrecht

+1 gran pregunta. Mi instinto sería usar 16 como máximo en lugar de 100 ( cbind(accuracy, 16-accuracy)), pero me preocupa si está matemáticamente justificado.
David Robinson

Respuestas:


3

Interesante pregunta. Una posibilidad que se me ocurre es incluir un parámetro adicional.p[0,1] para controlar el límite superior de la función 'enlace'.

Dejar {xj,yj,nj}, j=1,...,n ser observaciones independientes, donde yjBinomial{ni,pF(xjTβ)}, p[0,1], xj=(1,xj1,...,xjk)T es un vector de variables explicativas, β=(β0,...,βk) es un vector de coeficientes de regresión y F1Es la función de enlace. Entonces la función de probabilidad viene dada por

L(β,p)j=1npyjF(xjTβ)yj[1pF(xjTβ)]njyj

El siguiente paso es elegir un enlace, decir la distribución logística y encontrar el MLE correspondiente de (β,p).

Considere el siguiente ejemplo de juguete simulado usando un modelo de dosis-respuesta con (β0,β1,p)=(0.5,0.5,0.25) y 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)

Uno de los resultados que obtuve es (β^0,β^1,p^)=(0.4526650,0.4589112,0.2395564). Por lo tanto, parece ser exacto. Por supuesto, sería necesaria una exploración más detallada de este modelo porque incluir parámetros en un modelo de regresión binaria puede ser complicado y los problemas de identificación o existencia del MLE pueden saltar a la etapa 1 2 .

Editar

Dada la edición (que cambia el problema significativamente), el método que propuse anteriormente se puede modificar para ajustar los datos que ha proporcionado. Considera el modelo

accuracy=pF(x;μ,σ),

dónde F es el CDF logístico, μ es un parámetro de ubicación, σ es un parámetro de escala, y el parámetro pcontrola la altura de la curva de manera similar al modelo anterior. Este modelo puede ajustarse utilizando mínimos cuadrados no lineales . El siguiente código R muestra cómo hacer esto para sus datos.

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
Este es un enfoque interesante. ¿Cuáles serían las ventajas de usar este método sobre una función de regresión no lineal de tres parámetros?
Matt Albrecht

@MattAlbrecht Gracias por el interés. Puedo ver los pros y los contras de este enfoque. Una de las ventajas es la interpretabilidad del enfoque, que es similar a la regresión logit. Por otro lado, una función de regresión no lineal podría ser más flexible. Para obtener una buena estimación dep, parece necesario tener un buen diseño experimental que no se concentre en las colas de la función de enlace. No sé si el modelo ha sido estudiado antes.

2
El beneficio sería la incorporación correcta de la variabilidad binomial.
Aniko

@MattAlbrecht Tenga en cuenta que este método restringe la forma de la función ajustada para que sea sigmoidal y el parámetro pcontrola la altura mientras que el método no paramétrico que está considerando no lo hace. Por cierto, los parámetros estimados con este modelo son(μ^,σ^,p^)=(8.5121,0.8987,0.1483).

2

Usaría el máximo del vector X como el número total posible de éxitos. (Esta es una estimación sesgada del verdadero número máximo de éxitos, pero debería funcionar bastante bien si tiene suficientes datos).

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))

Esto crea una trama que se ve así:

ingrese la descripción de la imagen aquí


1

Tenga en cuenta que la regresión binomial se basa en tener una respuesta binaria para cada caso individual. cada respuesta individual debe poder tomar uno de dos valores. Si hay algún límite en la proporción, entonces también debe haber algunos casos que solo podrían tomar un valor.

Parece que no está tratando con datos binarios sino con datos sobre un rango finito. Si este es el caso, entonces la regresión beta suena más apropiada. Podemos escribir la distribución beta como:

p(di|LUμiϕ)=(diL)μiϕ1(Udi)(1μi)ϕ1B(μiϕ,(1μi)ϕ)(UL)ϕ1

Luego establece g(μi)=xiTβ igual que cualquier función de enlace que mapea el intervalo [L,U]en los reales. Hay un paquete R que puede usarse para adaptarse a estos modelos, aunque creo que necesita conocer los límites. Si lo hace, redefina la nueva variableyi=diLUL.


Gracias por la respuesta. Se trata de datos compuestos para simular una serie T | F con un total de 100 opciones dicotómicas para cada punto x. Entonces, los límites son 0 correctos o 100 correctos, pero este caso particular obtiene aproximadamente 15 correctos. Usando el paquete betareg ... pacc <- precisión / 100 + 0.00001; b1 <- betareg (pacc ~ x) ... me da la misma regresión de aspecto que el binomio. ¿Es esto lo que quisiste decir? ¿O sugieres imponer un límite basado en datos post-hoc? ¿En qué caso lo que distingue a la beta del binomio cuando a ambos se les han dado límites post-hoc?
Matt Albrecht
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.