Logistische Regression mit nicht Binären Zahlen

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Vortex
Beiträge: 9
Registriert: Mi Feb 03, 2021 4:02 pm

Logistische Regression mit nicht Binären Zahlen

Beitrag von Vortex »

Hallo alle Zusammen,
ich hatte vor einiger zeit schon mal eine Frage gestellt, aber leider habe ich kein Zugriff mehr auf mein Konto.

Für meine BA muss ich (als blutiger R Anfänger) jede menge GLM rechnen, für jeden Probanden eine, um die Parameter anschließend in einer ANOVA vergleich zu können.
Meine response liegen allerdings als Prozentwerte vor. Damit sind sie im Wertebereich zwischen 0 und 1 aber eben nicht nur binär.
Meine Betreuerin meinte dies wäre kein Problem, da man in R in der glm die response auch als Vektor eingeben könnte und es dann funktioniert. R würde dies dann als Häufigkeiten verstehen und zulassen oder so.

Gesagt getan:

resonse = response im Wertebereich 0-100 /100 (wusste nicht wie ich es besser schreiben sollte)
stimulus = Prädiktor mit 15 metrischen Ausprägungen

glm <- glm(c(daten4$response|100) ~ daten4$stimulus, family=binomial(link="logit"), maxit = 100)
coef(glm)

(Intercept) daten4$stimulus
2.556607e+01 1.878102e-07

Mein Problem ist nur das die Koeffizienten komplett Sinnfrei sind.
So viel ich weis kann der Wendepunkt durch 2.556607e+01/1.878102e-07 bestimmt werden und würde damit bei 136127165 liegen. Was für ein Quatsch.
Von daher habe ich die Vermutung, dass etwas mit meiner glm Gleichung nicht stimmt, vermutlich mit dem eingebauten Vektor

Weis zufällig einer von euch wie das funktioniert ? :?:

Lg
Vortex
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Logistische Regression mit nicht Binären Zahlen

Beitrag von bigben »

Hallo Vortex,
Vortex hat geschrieben: Mi Feb 03, 2021 4:23 pmresonse = response im Wertebereich 0-100 /100 (wusste nicht wie ich es besser schreiben sollte)
Am besten schreibst Du es als echten R Code in code Tags, sodass wir das Beispiel gleich auf unseren Rechnern in unser R kopieren können. Könnte ungefährt so aussehen:

Code: Alles auswählen

response <- c(23, 35, 66, 67, 88, 99)
würde damit bei 136127165 liegen. Was für ein Quatsch.
Muss kein Quatsch sein. Wenn stimulus keine Auswirkungen auf response hat, dann wird die Steigung eben sehr gering, weil der Algorithmus quasi eine waagerechte abbilden will - und der Wendepunkt von quasi waagerecht der liegt halt sehr, sehr weit weg von der realen Datenbasis. Wo kein Zusammenhang, da auch kein Wendepunkt. Hast Du denn mal eine Grafik gemacht, ob es visuell einen Zusammenhang zwischen stimulus und response gibt?

Ob das wirklich das Problem ist wüsste ich, wenn Du ein echtes Zahlenbeispiel in R-Code verpackt gepostet hättest. Siehe oben.

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 mit nicht Binären Zahlen

Beitrag von EDi »

Wir wäre es mit einer beta-Verteilung (wenn keine 1 und 0 dabei sind)?
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.
Vortex
Beiträge: 9
Registriert: Mi Feb 03, 2021 4:02 pm

Re: Logistische Regression mit nicht Binären Zahlen

Beitrag von Vortex »

Hallo Bernhard,

jetzt noch mal mit einem richtigem Code :)
Danke für deinen Beitrag für das Darstellen eines Codes, der hat super geholfen.

Also einen Zusammenhang sehe ich schon.

Code: Alles auswählen

#Erstellung des Datensatzes
response <- c(0.95, 0.85, 0.09, 0.54, 0.50, 1.00, 0.60, 0.01, 0.56, 0.51, 0.60, 0.06, 0.41, 0.34, 0.46, 1.00, 0.87, 0.16, 0.30, 0.36, 1.00, 0.59, 0.01, 0.30, 0.62, 0.63, 0.01, 0.33, 0.01, 0.32)
stimulus <- c(13, 12,  2,  7,  4, 14,  8,  0,  5, 10, 11,  1,  9,  3,  6, 13, 12,  2,  7,  4, 14,  8,  0,  5, 10, 11,  1,  9,  3,  6)

testframe <- data.frame(stimulus, response)

#Erstellung eines Plots
linie<- aggregate(testframe$response, by=list(testframe$stimulus), mean)
plot(NA, ylim=c(0,1), xlim=c(1,15))
lines(linie[,"x"], col="blue")

#glm Berechnung
glm <- glm(c(testframe$response|100) ~ testframe$stimulus, family=binomial(link="logit"), maxit = 100)
coef(glm)

#(Intercept) testframe$stimulus 
#2.556607e+01       1.878102e-07

a1 <- glm$coef[1]
b1 <- glm$coef[2]

wendep <- a1/b1
#wendep = 136127155 

Hallo Edi,
Eine beta- Verteilung war auch im Gespräch, aber es sind 0 und 1 dabei, weshalb wir zu einer logistischen Regression gegangen sind.

Schöne Grüße
Vortex

PS: Wie wird das hier gehandhabt, wird eher ein Synonym für den Namen genommen, oder ist lieber der richtige Name erwünscht ?
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Logistische Regression mit nicht Binären Zahlen

Beitrag von bigben »

Hallo Vortex,

ich weiß nicht, wo Du die Notation mit dem `|` her hast, aber das funktioniert so nicht.
Vortex hat geschrieben: Do Feb 04, 2021 2:53 pm> c(testframe$response|100)
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Das `|` wird als logisches Oder gelesen und alle Werte ungleich Null werden als TRUE gelesen und so kommt bei `|100` immer TRUE heraus.
Wie wird das hier gehandhabt, wird eher ein Synonym für den Namen genommen, oder ist lieber der richtige Name erwünscht ?
Ich glaube, wir haben das noch nie diskutiert und die Leute, bei denen ich beides kenne, spreche ich mal über ihren Nickname und mal über ihren Vornamen an. Wir sind da nicht kompliziert.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Logistische Regression mit nicht Binären Zahlen

Beitrag von bigben »

Schau mal, ob Dir das gefällt:

Code: Alles auswählen

response <- c(0.95, 0.85, 0.09, 0.54, 0.50, 1.00, 0.60, 0.01, 0.56, 0.51, 0.60, 0.06, 0.41, 0.34, 0.46, 1.00, 0.87, 0.16, 0.30, 0.36, 1.00, 0.59, 0.01, 0.30, 0.62, 0.63, 0.01, 0.33, 0.01, 0.32)
stimulus <- c(13, 12,  2,  7,  4, 14,  8,  0,  5, 10, 11,  1,  9,  3,  6, 13, 12,  2,  7,  4, 14,  8,  0,  5, 10, 11,  1,  9,  3,  6)
testframe <- data.frame(stimulus, response)

glm <- glm(response ~ stimulus, data = testframe, family=binomial(link="logit"), maxit = 100, weights = rep(1,30))
coef(glm)
plot(stimulus, response, xlim = c(-5, 19))
lines(-5:19, predict(glm, newdata = data.frame(stimulus = -5:19), type = "response"))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Vortex
Beiträge: 9
Registriert: Mi Feb 03, 2021 4:02 pm

Re: Logistische Regression mit nicht Binären Zahlen

Beitrag von Vortex »

Hallo Bernhard,

Diese Gleichung hatte ich von meiner Dozentin, das war ihre Überlegung wie ich die Binäre Logistische Regression mit nicht Binären Daten anwenden kann.

Hast du vielleicht eine Idee wie ich das Problem besser lösen könnte?

Schöne Grüße
Vortex
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Logistische Regression mit nicht Binären Zahlen

Beitrag von bigben »

Antwort 3 Minuten vor der Frage gepostet: z. B mit weights. Wenn Du jedem Datenpunkt ein Gewicht mit weights zuordnest kommt glm damit besser klar...
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Vortex
Beiträge: 9
Registriert: Mi Feb 03, 2021 4:02 pm

Re: Logistische Regression mit nicht Binären Zahlen

Beitrag von Vortex »

Hallo Bernhard,

als ich es geschrieben hatte, wurde meine Seite aktualisiert und ich hatte es auch gesehen :roll:

Das gefällt mir sehr gut und hilft mir echt weiter. Danke sehr!

Jetzt versuche ich mich mal an einer Schleife für die Auswertung :)

Liebe Grüße
Vortex
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Logistische Regression mit nicht Binären Zahlen

Beitrag von jogo »

Hallo Vortex,
Vortex hat geschrieben: Do Feb 04, 2021 3:49 pm Jetzt versuche ich mich mal an einer Schleife für die Auswertung :)
wie, was Schleife? :shock:
Das meiste geht in R ohne (explizite) Schleife.
Die *apply-Funktionen sollen in den meisten Fällen die Aufgaben gut bewältigen können.

Gruß, Jörg
Antworten