Seite 1 von 1

Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: So Dez 20, 2020 8:33 pm
von JanS
Hallo zusammen,

Ich probiere mich erstmals an logistischer Regression. Ich habe zwei verschiedene Methoden entdeckt und stoße durchgehend auf Fehler. Nun komme ich nicht mehr weiter.

Hier mein Code:

Code: Alles auswählen

Daten2 <- read.csv("Daten2.csv", header=T, sep = ";")
library(caret)
library(ggplot2)
library(plotROC)   
Variante1:

Code: Alles auswählen

modell2 <- as.formula(Daten2$Kauf01~Daten2$Alter..Kategorien..5.Jahre.)
logit2 <- glm(modell2, family = binomial, data = Daten2)
summary(logit2)

logit2MinAIC <- step(logit2)
summary(logit2MinAIC)

pred <- ifelse(fitted(logit2) > 0.5, 1, 0)
confusionMatrix(factor(Daten2$Kauf01), factor(pred))
Fehler in confusionMatrix.default(factor(Daten2$Kauf01), factor(pred)) : the data cannot have more levels than the reference

Dann habe ich es mit „table“ probiert und eine ähnliche Fehlermeldung erhalten: Fehler in table(factor(Daten2$Kauf01), factor(pred)) : alle Argumente müssen die selbe Länge haben

Code: Alles auswählen

confusionMatrix(table(Daten2$Kauf01), factor(pred))
table(factor(Daten2$Kauf01), factor(pred))
Ich habe die Level überprüft, beide sind NULL

Code: Alles auswählen

levels(pred)
levels(Daten2$Kauf01)
Hier meine 2.Variante mit der Fehlermeldung Fehler in rep.int(i.multi, number[number > 1]) : ungültige 'times' Werte:

Code: Alles auswählen

Alter <- Daten2$Alter..Kategorien..5.Jahre.
Alter.Ergebnis <- glm(Daten2$Kauf01 ~ Alter, family = binomial("logit"))
coef(Alter.Ergebnis)
summary(Alter.Ergebnis)
Alter.min = 2 
Alter.max = 12 
Alter.X = seq(Alter.min, Alter.max, by = 1)
Alter.Modell <- data.frame(Alter = Alter.X)
head(Alter.Modell)
tail(Alter.Modell)
Alter.Prognose <- predict(Alter.Ergebnis,Alter.Modell, type = "response")
sunflowerplot(Alter, Daten2$Kauf01, main = "Darstellung der Prognose", xlab = "Alter", ylab="Wahrscheinlichkeit P für Kauf des Tickets")
Über jeden Tipp bin ich sehr dankbar.

Beste Grüße
Jan

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: So Dez 20, 2020 11:28 pm
von bigben
Hallo Jan,

der erste Tipp ist immer, zu dem Code auch ein paar Daten zu posten, mit denen man den Code ausprobieren und den Fehler reproduzieren kann.

LG,
Bernhard

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: Mo Dez 21, 2020 12:52 am
von EDi
Ich tippe auf NAs...

Ohne ein reproduzierbares Beispiel bleibt das aber auch mein einziger...

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: Mo Dez 21, 2020 10:14 am
von JanS
An den NAs könnre es liegen. Sollte ich die leeren Zeilen herauslöschen oder gibt es eine Möglichkeit dies zu umgehen?

Alter beinhaltet Kategorien von 1 bis 12, auch NAs.

Code: Alles auswählen

Alter..Kategorien..5.Jahre.
12
11
12
10
10


5
6
8
10
8
10
9
6
Kauf ist eine Dummy, mit 0, 1 und NAs.

Code: Alles auswählen

Kauf01
1
1
1
1


1
1
1
1
0
0
1
1
1

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: Mo Dez 21, 2020 1:00 pm
von bigben

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: Mo Dez 21, 2020 1:24 pm
von EDi
Sollte ich die leeren Zeilen herauslöschen oder gibt es eine Möglichkeit dies zu umgehen?
Zeilenweises löschen wäre eine (einfache ) Möglichkeit. Im Model werden die sowieso rausgeworfen (siehe na.action argument).

Wo du das machst ist auch nochmal ein freiheitsgrad für dich - auf alles Daten oder nur für die Konfusion matrix...

Es gibt noch andere (z.b. imputation), aber die sind (wenig bis viel) komplexer.

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: Mo Dez 21, 2020 3:42 pm
von JanS
Ich danke euch vielmals!

Die NAs habe ich entfernt und nun klappt es. So einfach und doch kam ich nicht auf die Idee. Danke!

Falls es euch interessiert, bei confusionMatrix gibt es weiterhin Fehler :

Code: Alles auswählen

>confusionMatrix(table(Daten2$Kauf01), factor(pred))
Fehler in confusionMatrix.table(table(Daten2$Kauf01), factor(pred)) : 
  the table must have two dimensions
> confusionMatrix(factor(Daten2$Kauf01), factor(pred))
Fehler in confusionMatrix.default(factor(Daten2$Kauf01), factor(pred)) : 
  the data cannot have more levels than the reference
Mit table(factor(Daten2$Kauf01), factor(pred)) hat es aber geklappt und damit bin ich mehr als zufrieden.

Beste Grüße!

Logistische Regression (`mapping` must be created by `aes()`)

Verfasst: Di Dez 22, 2020 11:09 am
von JanS
Hallo, ich habe ein weiteres Problem zu obigen Daten.

Ich habe probiert nach dieser Seite http://www.sthda.com/english/articles/3 ... ials-in-r/ eine Grafik mit dem logistischen Regressionsmodell zu erstellen.

Im letzten Schritt habe ich die Fehlermeldung:
Fehler: `mapping` must be created by `aes()`

Mein Code sieht so aus:

Code: Alles auswählen

model <- glm(Kauf01~Alter..Kategorien..5.Jahre., data=Daten2, family = binomial)

newdata <- data.frame(Alter..Kategorien..5.Jahre. = c(1,12))

probabilities <- model %>% predict(newdata, type = "response")
predicted.classes <- ifelse(probabilities>0.5,"pos","neg")

Daten2 %>% 
        mutate(prob = ifelse(Kauf01=="pos",1,0)) %>%
        ggplot(aes(Alter..Kategorien..5.Jahre.,prob))+
        geom_point(alpha=0,2)+
        geom_smooth(method = "glm", method.args= list(family="binomial"))+
        labs(
          title= "logistic regression model",
          x = "Alter",
          y = "Wahrscheinlichkeit, das Ticket zu kaufen"
          )

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: Di Dez 22, 2020 3:28 pm
von EDi

Code: Alles auswählen

geom_point(alpha=0,2)+
Wenn man argument nicht benennt, das geht R nach der Reihenfolge ("positional matching").

Hier ist das zweite Argument (2) nicht benannt und wird somit als erstes Argument von ?geom_point genommen. Das ist mapping und erklärt die Fehlermeldung.

Entweder das zweite Argument benennen (wenn es nicht mapping sein sollte) oder (eher wahrscheinlich), das komma durch einen Punkt ersetzen. Denn intransparente Punkte mit alpha=0 machen wenig Sinn, eher alpha=0.2 ;)

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Verfasst: Di Dez 22, 2020 4:21 pm
von JanS
Ach je! Das ist es!
Danke :)