Logistische Regression (confusionMatrix oder sunflowerplot)

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
JanS
Beiträge: 5
Registriert: So Dez 20, 2020 8:25 pm

Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag 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
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag von EDi »

Ich tippe auf NAs...

Ohne ein reproduzierbares Beispiel bleibt das aber auch mein einziger...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
JanS
Beiträge: 5
Registriert: So Dez 20, 2020 8:25 pm

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag 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
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag von bigben »

---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag 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.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
JanS
Beiträge: 5
Registriert: So Dez 20, 2020 8:25 pm

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag 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!
JanS
Beiträge: 5
Registriert: So Dez 20, 2020 8:25 pm

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

Beitrag 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"
          )
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag 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 ;)
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
JanS
Beiträge: 5
Registriert: So Dez 20, 2020 8:25 pm

Re: Logistische Regression (confusionMatrix oder sunflowerplot)

Beitrag von JanS »

Ach je! Das ist es!
Danke :)
Antworten