2012-09-05 4 views
5

Ho un set di dati costituito da una variabile dipendente dicotomica (Y) e 12 variabili indipendenti (X1 a X12) memorizzate in un file csv. Ecco le prime 5 righe di dati:Tabella di classificazione per la regressione logistica in R

Y,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12 
0,9,3.86,111,126,14,13,1,7,7,0,M,46-50 
1,7074,3.88,232,4654,143,349,2,27,18,6,M,25-30 
1,5120,27.45,97,2924,298,324,3,56,21,0,M,31-35 
1,18656,79.32,408,1648,303,8730,286,294,62,28,M,25-30 
0,3869,21.23,260,2164,550,320,3,42,203,3,F,18-24 

ho costruito un modello di regressione logistica dai dati utilizzando il codice seguente:

mydata <- read.csv("data.csv")  
mylogit <- glm(Y~X1+X2+X3+X4+X5+X6+X7+X8+X9+X10+X11+X12, data=mydata, 
       family="binomial") 
mysteps <- step(mylogit, Y~X1+X2+X3+X4+X5+X6+X7+X8+X9+X10+X11+X12, data=mydata, 
       family="binomial") 

posso ottenere le probabilità previste per ogni dati usando il codice :

theProbs <- fitted(mysteps) 

Ora, vorrei creare una tabella di classificazione - utilizzando i primi 20 righe della tabella di dati (mydata) - da cui è possibile determinare l'Perce ntage delle probabilità previste che sono effettivamente d'accordo con i dati. Si noti che per la variabile dipendente (Y), 0 rappresenta la probabilità che è inferiore a 0,5 e 1 rappresenta la probabilità che è maggiore di 0,5.

Ho trascorso molte ore cercando di costruire la classificazione senza successo. Lo apprezzerei molto se qualcuno suggerisse il codice che può aiutare a risolvere questo problema.

+6

Che dire 'tabella (theProbs> 0,5, mydata $ Y)' (è facile sottoinsieme sulla prime 20 osservazioni)? – chl

+0

Grazie mille Chi. Penso che questo sia proprio quello di cui avevo bisogno. Grazie ancora e cordiali saluti. –

risposta

1

Penso che "round" possa fare il lavoro qui.
tabella (rotondo (theProbs))

8

La domanda è un po 'vecchia, ma immagino che se qualcuno sta cercando negli archivi, questo può aiutare. Questo è fatto facilmente xtabs

classDF <- data.frame(response = mydata$Y, predicted = round(fitted(mysteps),0)) 

xtabs(~ predicted + response, data = classDF) 

che produrrà una tabella come questa:

  response 
predicted 0 1 
     0 339 126 
     1 130 394