2016-06-21 6 views
0

Я в настоящее время работаю логистическую регрессию, которая требует использования «whights» аргумент в функции glm следующим образом:Выполнение кривого ROC для логистической регрессии, которая использует «вес» аргумент в GLM АиРа

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 

Обычно я использую библиотеки pROC или ROCR для выполнения кривых ROC, хотя они требуют, чтобы зависимая переменная регрессии была либо 0, либо 1, но не равна доле.

В связи с этим вопросом, я получаю следующее сообщение об ошибке:

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 

Так что мой вопрос: есть ли какой-R пакет, что там производит кривую ROC, а также поддерживает функцию R в glm с весовыми данными?

+0

Кривая ROC используется для оценки того, насколько хорошо вы моделируете класс по сравнению с другим (или несколько других, которые вы рассматриваете как один класс). В этом случае вам нужна еще одна метрика/график для оценки производительности, поскольку вы не предсказываете классы. в этом случае веса не имеют значения. – toni057

+0

glm с весами и family = binomial - модель логистической регрессии с 2 классами 1 или 0, агрегация - это всего лишь эффективный формат в группе по стилю, это не модель для продолжающихся данных. –

+0

Я вижу. в этом случае вы можете развернуть данные, например. для 0.007407407 добавьте 135 нулей и один 1, чтобы получить данные для работы, например. ROC-пакет. – toni057

ответ

1

Попробуйте это. Это не пакет, но он должен получить ROC. prob - вероятности логистической регрессии. Если это все еще слишком много очков, просто возьмите образец.

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