2017-05-15 2 views
2

Ich versuche, logische Regression zu tun, und ich habe zu dem Punkt, wo ich die Wahrscheinlichkeit für jede Beobachtung habe. Nun möchte ich die Wahrscheinlichkeiten auf 0 oder 1 bei einem gegebenen Schwellenwert klassifizierenRunde Zahlen bei einem Schwellenwert in R

Zum Beispiel, wenn ich zwei Nummern 0,65 und 0,87 habe und meine Schwelle 0,7 ist, möchte ich 0,65 auf 0 und 0,87 auf runden 1.

Um dies zu erreichen, habe ich den folgenden Code ausprobiert, der meiner Meinung nach zu viel für solch eine einfache Aufgabe ist, und ich würde gerne wissen, ob es irgendeine Funktion gibt, die dafür vorgesehen ist.

library(tidyverse) 

# create a table of probabilities and predictions (0 or 1) 
df <- tibble(
    prob = runif(20), 
    pred = round(prob) # threshold = 0.5 
) 

# threshold function for length = 1 
threshold_1 <- function(p,t) { 
    if (p > t) 1 else 0 
} 

# threshold function for length = p 
threshold_p <- function(ps, t) { 
    map2_dbl(ps, t, threshold_1) 
} 

# below works. 
df %>% mutate(
    pred = threshold_p(df$prob, 0.7) 
) 

Ich habe auch versucht, diese

# threshold = 0.7 
df %>% 
    mutate(
    pred = round(prob - 0.2) # threshold = 0.7 
) 

Above funktioniert ganz gut, da keine Wahrscheinlichkeit sein wird, genau 0 oder 1 (solange wir mit Verteilungsfunktionen zu tun hat), also auch wenn ich +/- 0,5 zu den Zahlen (um den Schwellenwert zu ändern), werden sie nie auf -1 oder 2 runden. Aber es ist nur, dass es nicht sehr elegant ist.

Ich würde gerne wissen, ob es eine Funktion gibt, die das auf eine viel einfachere Weise macht?

+0

Nur 'as.numeric (prob> 0.7)' oder 'findInterval (prob, 0.7)'? – thelatemail

Antwort

2

Sounds wie ifelse kann tun, was Sie wollen?

library(dplyr) 
df %>% 
    mutate(pred = ifelse(prob < 0.7, 0, 1)) 
+0

df%>% mutieren (pred = if (prob <0,7) 0 sonst 1) Ich habe dieses versucht, aber könnte ich wissen, warum dies einen Fehler zurückgibt? Vielen Dank! –

Verwandte Themen