Decidere di soglia per glm modello di regressione logistica in R

Ho alcuni dati con predittori e un binario di destinazione. Ad esempio:

df <- data.frame(a=sort(sample(1:100,30)), b= sort(sample(1:100,30)), 
                 target=c(rep(0,11),rep(1,4),rep(0,4),rep(1,11)))

Mi sono allenato logistica regresion modello utilizzando glm()

model1 <- glm(formula= target ~ a + b, data=df, family=binomial)

Ora sto cercando di predire il risultato (per esempio, i dati dovrebbero essere sufficienti)

predict(model1, newdata=df, type="response")

Questo genera un vettore di numeri di probabilità. Ma voglio predire la classe reale. Potrei usare round() sul probablity numeri, ma questo presuppone che tutto al di sotto di 0,5 è classe ‘0’, e tutto ciò di cui sopra è classe ‘1’. È questo un presupposto corretto? Anche quando la popolazione di ciascuna classe non può essere uguale (o quasi uguale)? O c’è un modo per stimare questa soglia?

ci sono diversi criteri, uno per esempio è il punto in cui la somma di sensibilità e specificità è massimo, vedi per esempio questa domanda: stackoverflow.com/questions/23131897/…
Grazie! Ma sarebbe certamente errato utilizzare come soglia la popolazione della frazione, giusto? Che è, se nella popolazione, il 30% dei casi sono 0, e 70% ‘1’, un ingenuo stima sarebbe utilizzare 0.3 come soglia. Ma questo non sarebbe un modo logico di questo approccio?
È possibile trovare un tutorial sull’argomento qui: hopstat.wordpress.com/2014/12/19/…

OriginaleL’autore user2175594 | 2014-04-23

4 Replies
  1. 5

    I migliori soglia (o di taglio) punto per essere utilizzato in modelli glm è il punto che massimizza la specificità e la sensibilità. Questo punto di soglia non possa dare la massima stima del modello, ma non sarebbe sbilanciata verso negativi o positivi. Il ROCR pacchetto contiene funzioni che possono aiutare a fare questo. controllare il performance() funzione in questo pacchetto. Si sta andando a ottenere ciò che stai cercando. Ecco una foto di quello che vi aspettate di ottenere:

    Decidere di soglia per glm modello di regressione logistica in R

    Dopo aver trovato il punto di taglio, di norma per scrivere una funzione a me stesso di trovare il numero di datapoint che ha la stima di valore al di sopra della frequenza di taglio, e di corrispondere con il gruppo a cui appartengono.

    potrebbe fornire un più specifico codice per generare il grafico di cui sopra? Inoltre, come i valori di cutoff essere compresa tra 0 e 14 per le probabilità che assumere valori compresi tra 0 e 1?
    Ho aggiunto vile/ggplot approcci di sotto!

    OriginaleL’autore Error404

  2. 4

    Il gold standard per la determinazione del buono parametri del modello, tra cui “qual è la soglia si deve impostare” per la regressione logistica, è di cross-validazione.

    L’idea generale è quello di tenere una o più parti del training set e scegliere la soglia che massimizza il numero di classificazioni corrette su questo detenute fuori del set, ma Wikipedia può dare molti più dettagli.

    Dal momento che saremmo tuning la soglia parametro sulla croce di convalida dei dati, apparentemente, che richiederebbe una terza svolta set per la valutazione e la relazione imparziale previsto errore?
    Sì, è corretto. Tradizionalmente si avrebbe almeno tre partizioni separate dei dati: la formazione, la convalida e il test (valutazione). Tuttavia, se si sta facendo qualcosa di simile a k-fold cross-validation, quindi la formazione e la validazione, sono essenzialmente lo stesso set di ri-partizionato in più modi.

    OriginaleL’autore merlin2011

  3. 0

    Lavorato intorno cercando di replicare il primo grafico. Dato un predictions <- prediction(pred,labels) oggetto, quindi:

    vile approccio

    plot(unlist(performance(predictions, "sens")@x.values), unlist(performance(predictions, "sens")@y.values), 
         type="l", lwd=2, ylab="Specificity", xlab="Cutoff")
    par(new=TRUE)
    plot(unlist(performance(predictions, "spec")@x.values), unlist(performance(predictions, "spec")@y.values), 
         type="l", lwd=2, col='red', ylab="", xlab="")
    axis(4, at=seq(0,1,0.2),labels=z)
    mtext("Specificity",side=4, padj=-2, col='red')

    Decidere di soglia per glm modello di regressione logistica in R

    ggplot2 approccio

    sens <- data.frame(x=unlist(performance(predictions, "sens")@x.values), 
                       y=unlist(performance(predictions, "sens")@y.values))
    spec <- data.frame(x=unlist(performance(predictions, "spec")@x.values), 
                       y=unlist(performance(predictions, "spec")@y.values))
    
    sens %>% ggplot(aes(x,y)) + 
      geom_line() + 
      geom_line(data=spec, aes(x,y,col="red")) +
      scale_y_continuous(sec.axis = sec_axis(~., name = "Specificity")) +
      labs(x='Cutoff', y="Sensitivity") +
      theme(axis.title.y.right = element_text(colour = "red"), legend.position="none") 

    Decidere di soglia per glm modello di regressione logistica in R

    OriginaleL’autore user61871

  4. -2

    Si può provare il seguente:

    perfspec <- performance(prediction.obj = pred, measure="spec", x.measure="cutoff")
    
    plot(perfspec)
    
    par(new=TRUE)
    
    perfsens <- performance(prediction.obj = pred, measure="sens", x.measure="cutoff")
    
    plot(perfsens)

    OriginaleL’autore Dipayan Sarkar

Lascia un commento