Qual é a função de custo no cv.glm no pacote de inicialização do R?


14

Estou fazendo uma validação cruzada usando o método deixar de fora. Eu tenho uma resposta binária e estou usando o pacote de inicialização para R e a função cv.glm . Meu problema é que não entendo completamente a parte "custo" dessa função. Pelo que entendi, é a função que decide se um valor estimado deve ser classificado como 1 ou 0, ou seja, o valor limite para a classificação. Isso está correto?

E, na ajuda em R eles usam esta função para um modelo binomial: cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5). Como interpreto essa função? para que eu possa modificá-lo corretamente para minha análise.

Qualquer ajuda é apreciada, não quero usar uma função que não entendo.

Respostas:


9

r é um vetor que contém o resultado real, pi é um vetor que contém os valores ajustados.

cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

cost=|rEu-pEuEu|

mycost <- function(r, pi){
    weight1 = 1 #cost for getting 1 wrong
    weight0 = 1 #cost for getting 0 wrong
    c1 = (r==1)&(pi<0.5) #logical vector - true if actual 1 but predict 0
    c0 = (r==0)&(pi>=0.5) #logical vector - true if actual 0 but predict 1
    return(mean(weight1*c1+weight0*c0))
  }

e coloque mycost como argumento na função cv.glm.


cost
|rEu-pEu|0,5
|rEu-pEu|=112

@ feng-mai pi == 0 ou pi <0,5? (e pi == 1 ou pi> 0,5?) se estiver usando 0,5 como limite de decisão. Os pi não são as probabilidades previstas ?
PM.

1
pEu

1
cost <- function(r, pi = 0) mean(abs(r-pi) > 0.5)

Primeiro, você definiu um ponto de corte como 0,5. Seu r é 0/1, mas pi é probabilidade. Portanto, o custo individual é 1 se o erro absoluto for maior que 0,5, caso contrário, 0. Então, essa função calcula a taxa de erro média. Mas lembre-se, o limite foi definido antes de você definir sua função de custo.

Na verdade, acho que faz mais sentido se a escolha do ponto de corte for determinada pela função de custo.


0

A resposta do @SLi já explica muito bem o que a função de custo que você definiu faz. No entanto, pensei em acrescentar que a função de custo é usada para calcular o deltavalor de cv.glm, que é uma medida do erro de validação cruzada. No entanto, criticamente deltaé a média ponderada do erro de cada dobra fornecida pelo custo. Vemos isso inspecionando o bit relevante do código:

for (i in seq_len(ms)) {
    j.out <- seq_len(n)[(s == i)]
    j.in <- seq_len(n)[(s != i)]
    Call$data <- data[j.in, , drop = FALSE]
    d.glm <- eval.parent(Call)
    p.alpha <- n.s[i]/n # create weighting for averaging later
    cost.i <- cost(glm.y[j.out], predict(d.glm, data[j.out, 
        , drop = FALSE], type = "response"))
    CV <- CV + p.alpha * cost.i # add previous error to running total
    cost.0 <- cost.0 - p.alpha * cost(glm.y, predict(d.glm, 
        data, type = "response"))
}

e o valor retornado pela função é:

  list(call = call, K = K, delta = as.numeric(c(CV, CV + cost.0)), 
    seed = seed)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.