Qual è una buona visualizzazione per le regressioni di Poisson?


11

Voglio associare i difetti di codice a metriche di complessità del codice come la vicinanza. Un modello comune è quello di vedere questo come un processo di Poisson, in cui la durata è il tempo impiegato per la codifica e la densità è una funzione della complessità del codice. Sono in grado di fare una regressione e ottenere valori di significati, ecc.

Tuttavia, è difficile per me visualizzare i risultati (e ancora più difficile per i miei colleghi meno matematicamente inclini). C'è un buon modo per vederlo per guardare cose come valori anomali, se si tratta di una tendenza lineare ecc.? (Sono apprezzati i collegamenti ai pacchetti R).

Ad esempio, potrei solo tracciare Defects / Time ~ Complexityma questo è abbastanza rumoroso e poiché Defectsè discretizzato e molto piccolo, è difficile vedere la tendenza. Una cosa a cui stavo pensando è che avrei potuto dividere i dati in quantili e quindi fare una regressione per quantile e tracciare le densità risultanti - non sono sicuro di quanto sia valido, soprattutto perché i miei dati non sono normalmente distribuiti, quindi potrebbe indurre in errore le persone su cosa sia un quantile.

Risposte:


6

Dopo aver adattato il modello, perché non usare i difetti previsti come variabile per confrontarli con gli altri usando le tecniche standard che hanno significato per loro? Ha il vantaggio di essere una variabile continua in modo da poter vedere anche piccole differenze. Ad esempio, le persone capiranno la differenza tra un numero atteso di difetti di 1,4 e di 0,6 anche se entrambi si arrotondano a uno.

Per un esempio di come il valore previsto dipende da due variabili, è possibile eseguire un diagramma di contorno di tempo v. Complessità come i due assi, il colore e i contorni per mostrare i difetti previsti; e sovrapponi i punti dati reali in alto.

La trama qui sotto ha bisogno di un po 'di lucidatura e una leggenda, ma potrebbe essere un punto di partenza.

inserisci qui la descrizione dell'immagine

Un'alternativa è il diagramma variabile aggiunto o il diagramma di regressione parziale, più familiare da una regressione gaussiana tradizionale. Questi sono implementati nella biblioteca dell'auto. In effetti, mostra la relazione tra ciò che resta della risposta e ciò che resta di una delle variabili esplicative, dopo che il resto delle variabili esplicative ha rimosso il loro contributo sia alla risposta che alle variabili esplicative. Nella mia esperienza, la maggior parte del pubblico non statistico ritiene che questi siano un po 'difficili da apprezzare (potrebbe, ovviamente, con le mie scarse spiegazioni).

inserisci qui la descrizione dell'immagine

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

2

Quindi si esegue una regressione di Poisson sulla variabile dei dati di conteggio "difetti" e si desidera visualizzare differenze significative. Cosa fai quando che la regressione è stimare la media condizionale , dove sono i difetti e sono i tuoi regressori, come la complessità del codice.E[yio|Xio]yioXio

Il modo più semplice per visualizzarlo è prendere due diversi valori per , ad esempio, alta complessità e bassa complessità, e quindi tracciare la frequenza prevista di ecc. Per entrambi i livelli di complessità. L'istogramma risultante sarebbe simile a questo nella diapositiva 3. Se le differenze sono forti, gli istrogrammi di quelle frequenze appariranno molto diversi (ad esempio, molti zeri per bassa complessità e molti alti difetti per alta complessità). Potrebbe sembrare carino che tu sovrapponga questi due istogrammi o che traccia la differenza nei difetti previsti.Xioyio=0,yio=1

Se ritieni che ridurre la tua a 2 categorie sia un'eccessiva semplificazione, puoi fare lo stesso per qualsiasi set discreto di , ma non è una buona presentazione visiva se lanci più di, diciamo, 4 grafici contemporaneamente al tuo pubblico .XioXio

In alternativa, se è continuo, è possibile tracciare un conteggio previsto (ad es. Difetti = 0) a seconda di quel . Forse questo si traduce in un bel monotono che è in linea con i tuoi risultati.XioXio

A proposito: hai anche eseguito una regressione binomiale negativa sui tuoi dati? I risultati sono molto diversi? In tal caso, il tuo presupposto di Poisson (media condizionale uguale alla varianza condizionale) potrebbe essere troppo restrittivo (vedi "sovraispersione"). Questo potrebbe essere il caso, ad esempio, se la variabile "difetto" ha molti zeri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.