2016-06-21 5 views
0

ich derzeit eine logistische Regression renne, die die Verwendung des „whights“ Argument in der glm Funktion, wie folgend erfordert:Perform ROC-Kurve für die logistische Regression, die die „Gewichte“ Argument in R glm verwendet

model <-glm(cr ~kw_url+row_number+domn*plform+score100,family=binomial,weights=weights,data=glm_data) 

head(glm_data[cr>0 & cr <1]) 
    kw_url plform row_number domn score cr weights score100 
1: other Desktop   0 *** 0.25 0.007407407  135  25 
2: other Desktop   0 d*** 0.24 0.011494253  87  24 
3: other Mobile   0 *** 0.14 0.001414427  707  14 
4: other Mobile   1 *** 0.43 0.013888889  144  43 
5: other Mobile   2 *** 0.38 0.027027027  37  38 
6: other Mobile   1 *** 0.48 0.014285714  70  48 

head(glm_data[cr>0 & cr <1,.(cr)]) #Dependant variable is a fraction!, not 0 or 1 
      cr 
1: 0.007407407 
2: 0.011494253 
3: 0.001414427 
4: 0.013888889 
5: 0.027027027 
6: 0.014285714 

Ich verwende normalerweise die pROC oder ROCR Bibliotheken für die Durchführung ROC Kurven, obwohl sie die abhängige Variable der Regression entweder 0 oder 1, aber kein Bruch erfordern.

Aufgrund dieses Problems, ich erhalte den folgenden Fehler:

library(ROCR) 
> p <- predict(bayes_model, newdata=glm_data, type="response") 
> pr <- prediction(p, glm_data$cr) 
Error in prediction(p, glm_data$cr) : 
    Number of classes is not equal to 2. 
ROCR currently supports only evaluation of binary classification tasks 

Also meine Frage ist: Gibt es da draußen einige R-Paket, das ROC-Kurve erzeugt und unterstützt mit gewichteten Daten glm Funktion des R?

+0

Die ROC-Kurve wird verwendet, um zu beurteilen, wie gut das Modell eine Klasse im Vergleich zu einer anderen klassifiziert (oder mehrere andere, die Sie dann als eine Klasse behandeln). In diesem Fall benötigen Sie eine andere Metrik/ein anderes Diagramm, um die Leistung zu beurteilen, da Sie keine Klassen vorhersagen. Die Gewichte spielen in diesem Fall keine Rolle. – toni057

+0

Glm mit Gewichten und Familie = Binomial ist ein logistisches Regressionsmodell mit 2 Klassen 1 oder 0, die Aggregation ist nur ein effizientes Format in einer Gruppe nach Stil, es ist kein Modell für fortlaufende Daten –

+0

Ich sehe. In diesem Fall könnten Sie die Daten z. für 0,007407407 fügen Sie 135 Nullen und eine einzelne 1 hinzu, um die Daten mit z.B. ROC-Paket. – toni057

Antwort

1

Versuchen Sie dies dann. Es ist kein Paket, aber sollte die ROC bekommen. prob sind die Wahrscheinlichkeiten aus der logistischen Regression. Wenn das immer noch zu viele Punkte sind, dann nimm ein Beispiel.

d <- data.frame(cr = c(1/212, 1/142, 1/15*2, 10/16, 10/3), 
       weight = c(212, 142, 15, 16, 3), 
       prob = c(1/200, 1/100, 1/35, 1/2, .7)) 


d$N <- (1 + d$cr) * d$weight 
d$y <- d$cr * d$weight 
o <- order(d$prob) 
d <- d[o,] 

N <- sum(d$y) 
TOT <- sum(d$N) 

x.plot <- cumsum(d$y)/N 
y.plot <- cumsum(d$N)/(TOT - N) 


plot(x.plot, y.plot, type = 'b') 
Verwandte Themen