11 votos

¿Cuál es una buena visualización para las regresiones de Poisson?

Quiero asociar los defectos del código con las métricas de complejidad del código, como la cercanía. Un modelo común es ver esto como un proceso de Poisson, donde la duración es el tiempo que se pasa codificando y la densidad es una función de la complejidad del código. Puedo hacer una regresión y obtener valores de significación, etc.

Sin embargo, es difícil para mí visualizar los resultados (y aún más para mis colegas menos inclinados a las matemáticas). ¿Existe una buena forma de visualizar esto para ver cosas como los valores atípicos, si es una tendencia lineal, etc.? (Se agradecen los enlaces a los paquetes de R).

Por ejemplo, podría trazar Defects / Time ~ Complexity pero esto es bastante ruidoso y como Defects es discreto y muy pequeño, es difícil ver la tendencia. Una cosa que estaba pensando es que podría cortar los datos en cuantiles y luego hacer una regresión por cuantil y trazar las densidades resultantes - No estoy seguro de la validez de esto, sobre todo porque mis datos no se distribuyen normalmente por lo que podría confundir a la gente acerca de lo que es un cuantil.

6voto

Ted Puntos 854

Una vez ajustado el modelo, ¿por qué no utilizar los defectos predichos como variable para compararlos con los demás utilizando cualquier técnica estándar que tenga sentido para ellos? Tiene la ventaja de ser una variable continua, por lo que se pueden ver incluso las pequeñas diferencias. Por ejemplo, la gente entenderá la diferencia entre un número de defectos esperado de 1,4 y de 0,6 aunque ambos se redondeen a uno.

Para un ejemplo de cómo el valor predicho depende de dos variables, podría hacer un gráfico de contorno de tiempo v. complejidad como los dos ejes y el color y los contornos para mostrar los defectos predichos; y superponer los puntos de datos reales en la parte superior.

La trama de abajo necesita un poco de pulido y una leyenda, pero podría ser un punto de partida.

enter image description here

Una alternativa es el diagrama de variables añadidas o el diagrama de regresión parcial, más familiar de una regresión de respuesta gaussiana tradicional. Estos se implementan en la biblioteca de automóviles. En efecto, muestran la relación entre lo que queda de la respuesta y lo que queda de una de las variables explicativas, después de que se haya eliminado la contribución del resto de las variables explicativas a la respuesta y a las variables explicativas. Según mi experiencia, a la mayoría de los no estadísticos les resulta un poco difícil de entender (por supuesto, debido a mis pobres explicaciones).

enter image description here

#--------------------------------------------------------------------
# Simulate some data
n<-200
time <- rexp(n,.01)
complexity <- sample(1:5, n, prob=c(.1,.25,.35,.2,.1), replace=TRUE)
trueMod <- exp(-1 + time*.005 + complexity*.1 + complexity^2*.05)
defects <- rpois(n, trueMod)
cbind(trueMod, defects)

#----------------------------------------------------------------------
# Fit model
model <- glm(defects~time + poly(complexity,2), family=poisson)
# all sorts of diagnostic checks should be done here - not shown

#---------------------------------------------------------------------
# Two variables at once in a contour plot

# create grid
gridded <- data.frame(
    time=seq(from=0, to=max(time)*1.1, length.out=100),
    complexity=seq(from=0, to=max(complexity)*1.1, length.out=100))

# create predicted values (on the original scale)
yhat <- predict(model, newdata=expand.grid(gridded), type="response")

# draw plot
image(gridded$time, gridded$complexity, matrix(yhat,nrow=100, byrow=FALSE),
    xlab="Time", ylab="Complexity", main="Predicted average number of defects shown as colour and contours\n(actual data shown as circles)")
contour(gridded$time, gridded$complexity, matrix(yhat,nrow=100, byrow=FALSE), add=TRUE, levels=c(1,2,4,8,15,20,30,40,50,60,70,80,100))

# Add the original data
symbols(time, complexity, circles=sqrt(defects), add=T, inches=.5)

#--------------------------------------------------------------------
# added variable plots

library(car)
avPlots(model, layout=c(1,3))

2voto

Nameless Puntos 933

Así que ejecutas una regresión de Poisson sobre la variable de datos de conteo "defectos" y quieres visualizar las diferencias significativas. Lo que se hace al estimar esa regresión es estimar la media condicional $E[y_i| x_i]$ , donde $y_i$ son los defectos y $x_i$ son sus regresores, como la complejidad del código.

La forma más fácil de visualizarlo es simplemente tomar dos valores diferentes para $x_i$ por ejemplo, de alta complejidad y de baja complejidad, y luego trazar la frecuencia prevista de $y_i=0, y_i=1$ etc. para ambos niveles de complejidad. El histograma resultante tendría el siguiente aspecto este en la diapositiva 3. Si las diferencias son fuertes, los histrogramas de esas frecuencias tendrán un aspecto muy diferente (por ejemplo, muchos ceros para una complejidad baja y muchos defectos altos para una complejidad alta). Puede quedar muy bien si se superponen estos dos histogramas, o si se traza la diferencia en los defectos predichos.

Si crees que reducir tu $x_i$ a 2 categorías es una simplificación excesiva, se puede hacer lo mismo para cualquier conjunto discreto de $x_i$ Pero no es una buena presentación visual si se lanzan más de, por ejemplo, 4 gráficos a la vez.

Alternativamente, si su $x_i$ es continua, se podría trazar un recuento previsto (por ejemplo, defectos=0) en función de ese $x_i$ . Tal vez esto dé lugar a una bonita función monótona que esté en consonancia con sus resultados.

Por cierto: ¿has realizado también una regresión binomial negativa con tus datos? ¿Son los resultados muy diferentes? Si es así, su hipótesis de Poisson (media condicional igual a la varianza condicional) podría ser demasiado restrictiva (véase "sobredispersión"). Este podría ser el caso, por ejemplo, si su variable "defecto" tiene muchos ceros.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X