Die lineare Regression passt nicht gut

9

Ich mache eine lineare Regression mit der R lm-Funktion:

x = log(errors)
plot(x,y)
lm.result = lm(formula = y ~ x)
abline(lm.result, col="blue") # showing the "fit" in blue

Geben Sie hier die Bildbeschreibung ein

aber es passt nicht gut. Leider kann ich das Handbuch nicht verstehen.

Kann mich jemand in die richtige Richtung weisen, um besser dazu zu passen?

Mit Anpassen meine ich, dass ich den Root Mean Squared Error (RMSE) minimieren möchte.


Bearbeiten : Ich habe hier eine verwandte Frage gestellt (es ist das gleiche Problem): Kann ich den RMSE basierend auf dieser Funktion weiter verringern?

und die Rohdaten hier:

http://tny.cz/c320180d

mit der Ausnahme, dass auf diesem Link x auf der vorliegenden Seite als Fehler bezeichnet wird und es weniger Beispiele gibt (1000 vs 3000 im vorliegenden Seitendiagramm). Ich wollte die Dinge in der anderen Frage einfacher machen.

Timothée HENRY
quelle
4
R lm funktioniert wie erwartet, das Problem liegt bei Ihren Daten, dh die lineare Beziehung ist in diesem Fall nicht angemessen.
mpiktas
2
Könnten Sie zeichnen, welche Linie Sie Ihrer Meinung nach erhalten sollten und warum Ihre Linie Ihrer Meinung nach eine kleinere MSE aufweist? Ich stelle fest, dass Ihr y zwischen 0 und 1 liegt, daher klingt eine lineare Regression für diese Daten ziemlich ungeeignet. Was sind die Werte?
Glen_b -State Monica
2
Wenn die y-Werte Wahrscheinlichkeiten sind, möchten Sie überhaupt keine OLS-Regression.
Peter Flom
3
(Entschuldigung, könnte dies vorher posten.) Was für Sie unten als "eine bessere Anpassung" erscheint, ist (ungefähr) die Minimierung der Quadratsummen orthogonaler Abstände, nicht der vertikalen Abstände, bei denen Ihre Intuition falsch ist. Sie können die ungefähre MSE leicht genug überprüfen! Wenn die y-Werte Wahrscheinlichkeiten sind, sollten Sie besser von einem Modell bedient werden, das nicht außerhalb des Bereichs von 0 bis 1 liegt.
Glen_b - Monica am
2
Es könnte sein, dass diese Regression unter dem Vorhandensein einiger Ausreißer leidet. Könnte ein Fall für eine robuste Regression sein. en.wikipedia.org/wiki/Robust_regression
Yves Daoust

Antworten:

18

Eine der einfachsten Lösungen erkennt, dass Änderungen zwischen Wahrscheinlichkeiten, die klein sind (wie 0,1) oder deren Komplemente klein sind (wie 0,9), normalerweise aussagekräftiger sind und mehr Gewicht verdienen als Änderungen zwischen mittleren Wahrscheinlichkeiten (wie 0,5).

Zum Beispiel verdoppelt eine Änderung von 0,1 auf 0,2 (a) die Wahrscheinlichkeit, während (b) die komplementäre Wahrscheinlichkeit nur um 1/9 ändert (von 1-0,1 = 0,9 auf 1-0,2 auf 0,8 fallen gelassen wird), während eine Änderung von 0,5 auf 0,6 (a) erhöht die Wahrscheinlichkeit nur um 20%, während (b) die komplementäre Wahrscheinlichkeit nur um 20% verringert. In vielen Anwendungen wird oder sollte diese erste Änderung als fast doppelt so groß angesehen werden wie die zweite.

In jeder Situation, in der es gleichermaßen sinnvoll wäre, eine Wahrscheinlichkeit (für das Auftreten von etwas) oder deren Komplement (dh die Wahrscheinlichkeit, dass etwas nicht auftritt) zu verwenden, sollten wir diese Symmetrie respektieren.

Diese beiden Ideen - die Symmetrie zwischen den Wahrscheinlichkeiten und ihren Komplementen respektieren und Änderungen eher relativ als absolut auszudrücken - legen nahe, dass wir beim Vergleich zweier Wahrscheinlichkeiten und beide Verhältnisse und verfolgen sollten die Verhältnisse ihrer Komplemente . Bei der Verfolgung von Verhältnissen ist es einfacher, Logarithmen zu verwenden, die Verhältnisse in Differenzen umwandeln. Ergo ist eine gute Möglichkeit, eine Wahrscheinlichkeit für diesen Zweck auszudrücken , die Verwendung von was als Log Odds oder Logit bezeichnet wird1 - p p p 'p1pppp/p(1p)/(1p)p

z=logplog(1p),
von . Angepasste Protokollquoten können immer durch Invertieren des Protokolls wieder in Wahrscheinlichkeiten umgewandelt werden. Die letzte Zeile des folgenden Codes zeigt, wie dies gemacht wird.pz
p=exp(z)/(1+exp(z)).

Diese Argumentation ist eher allgemein gehalten: Sie führt zu einem guten Standard-Anfangsverfahren für die Untersuchung aller Datensätze mit Wahrscheinlichkeiten. (Es gibt bessere Methoden wie die Poisson-Regression, wenn die Wahrscheinlichkeiten auf der Beobachtung von Verhältnissen von "Erfolgen" zu Anzahl von "Versuchen" basieren, da Wahrscheinlichkeiten, die auf mehr Versuchen basieren, zuverlässiger gemessen wurden. Dies scheint nicht der Fall zu sein Fall hier, in dem die Wahrscheinlichkeiten auf ermittelten Informationen basieren. Man könnte den Poisson-Regressionsansatz approximieren, indem man im folgenden Beispiel gewichtete kleinste Quadrate verwendet, um Daten zu ermöglichen, die mehr oder weniger zuverlässig sind.)

Schauen wir uns ein Beispiel an.

Zahlen

R2Rlm

Das Streudiagramm auf der rechten Seite drückt die Daten in Form von Wahrscheinlichkeiten aus, wie sie ursprünglich aufgezeichnet wurden. Die gleiche Anpassung wird aufgezeichnet: Jetzt sieht sie aufgrund der nichtlinearen Art und Weise, in der Log-Quoten in Wahrscheinlichkeiten umgewandelt werden, gekrümmt aus.

Im Sinne des quadratischen Mittelwertfehlers in Bezug auf die logarithmischen Quoten ist diese Kurve die beste Anpassung.

Übrigens legen die annähernd elliptische Form der Wolke auf der linken Seite und die Art und Weise, wie sie die Linie der kleinsten Quadrate verfolgt, nahe, dass das Regressionsmodell der kleinsten Quadrate sinnvoll ist: Die Daten können durch eine lineare Beziehung angemessen beschrieben werden - vorausgesetzt, es werden logarithmische Quoten verwendet - und die vertikale Variation um die Linie ist unabhängig von der horizontalen Position (Homoskedastizität) ungefähr gleich groß. (In der Mitte befinden sich einige ungewöhnlich niedrige Werte, die möglicherweise näher untersucht werden müssen.) Bewerten Sie dies genauer, indem Sie dem folgenden Code mit dem Befehl folgen plot(fit), um einige Standarddiagnosen anzuzeigen. Dies allein ist ein starker Grund, Log-Quoten zu verwenden, um diese Daten anstelle der Wahrscheinlichkeiten zu analysieren.


#
# Read the data from a table of (X,Y) = (X, probability) pairs.
#
x <- read.table("F:/temp/data.csv", sep=",", col.names=c("X", "Y"))
#
# Define functions to convert between probabilities `p` and log odds `z`.
# (When some probabilities actually equal 0 or 1, a tiny adjustment--given by a positive
# value of `e`--needs to be applied to avoid infinite log odds.)
#
logit <- function(p, e=0) {x <- (p-1/2)*(1-e) + 1/2; log(x) - log(1-x)}
logistic <- function(z, e=0) {y <- exp(z)/(1 + exp(z)); (y-1/2)/(1-e) + 1/2}
#
# Fit the log odds using least squares.
#
b <- coef(fit <- lm(logit(x$Y) ~ x$X))
#
# Plot the results in two ways.
#
par(mfrow=c(1,2))
plot(x$X, logit(x$Y), cex=0.5, col="Gray",
     main="Least Squares Fit", xlab="X", ylab="Log odds")
abline(b, col="Red", lwd=2)

plot(x$X, x$Y, cex=0.5, col="Gray",
     main="LS Fit Re-expressed", xlab="X", ylab="Probability")
curve(logistic(b[1] + b[2]*x), col="Red", lwd=2, add=TRUE)
whuber
quelle
Vielen Dank für die Antwort. Ich werde etwas Zeit brauchen, um das zu versuchen.
Timothée HENRY
Beim Versuch, Ihren Code mit meinen Daten zu testen, tritt ein Fehler auf, wenn ich versuche, die Protokollquoten anzupassen: "Fehler in lm.fit (x, y, Offset = Offset, Singular.ok = Singular.ok, ...): NA / NaN / Inf im Fremdfunktionsaufruf (arg 4) ".
Timothée HENRY
Bitte lesen Sie die Kommentare im Code: Sie erklären, was das Problem ist und was dagegen zu tun ist.
whuber
6

Angesichts des Versatzes in den Daten mit x ist es naheliegend, zunächst eine logistische Regression ( Wiki-Link ) zu verwenden. Also bin ich mit whuber dabei. Ich werde sagen, dass für sich genommen eine starke Bedeutung hat, aber den größten Teil der Abweichung nicht erklärt (das Äquivalent der Gesamtsumme der Quadrate in einem OLS). Man könnte also vorschlagen, dass es neben noch eine andere Kovariate gibt , die die Erklärungskraft unterstützt (z. B. die Personen, die die Klassifizierung oder die verwendete Methode durchführen). Ihre Daten sind jedoch bereits [0,1]: Wissen Sie, ob sie Wahrscheinlichkeiten oder Vorkommen darstellen? Verhältnisse? In diesem Fall sollten Sie eine logistische Regression mit Ihrem nicht transformierten versuchen (bevor es sich um Verhältnisse / Wahrscheinlichkeiten handelt).xxyy

Die Beobachtung von Peter Flom macht nur Sinn, wenn Ihr y keine Wahrscheinlichkeit ist. Überprüfen Sie plot(density(y));rug(y)in verschiedenen Buckets von ob sich die Beta-Distribution ändert, oder führen Sie sie einfach aus . Beachten Sie, dass die Beta-Verteilung auch eine exponentielle Familienverteilung ist und daher in R modelliert werden kann .xbetaregglm

Um Ihnen eine Vorstellung davon zu geben, was ich unter logistischer Regression verstanden habe:

# the 'real' relationship where y is interpreted as the probability of success
y = runif(400)
x = -2*(log(y/(1-y)) - 2) + rnorm(400,sd=2) 
glm.logit=glm(y~x,family=binomial); summary(glm.logit) 
plot(y ~ x); require(faraway); grid()
points(x,ilogit(coef(glm.logit) %*% rbind(1.0,x)),col="red")
tt=runif(400)  # an example of your untransformed regression
newy = ifelse(tt < y, 1, 0)
glm.logit=glm(newy~x,family=binomial); summary(glm.logit) 

# if there is not a good match in your tail probabilities try different link function or oversampling with correction (will be worse here, but perhaps not in your data)
glm.probit=glm(y~x,family=binomial(link=probit)); summary(glm.probit)
glm.cloglog=glm(y~x,family=binomial(link=cloglog)); summary(glm.cloglog)

Eine logistische Regression, bei der das wahre Modell $ log (\ frac {p} {1-p}) = 2-0,5x ist

EDIT: nach dem Lesen der Kommentare:

Angesichts der Tatsache, dass "die y-Werte Wahrscheinlichkeiten für eine bestimmte Klasse sind, die sich aus der Mittelwertbildung von Klassifizierungen ergeben, die manuell von Personen durchgeführt wurden", empfehle ich dringend, eine logistische Regression für Ihre Basisdaten durchzuführen. Hier ist ein Beispiel:

Angenommen, Sie prüfen die Wahrscheinlichkeit, dass jemand einem Vorschlag zustimmt ( stimmt zu, stimmt nicht zu), wenn ein Anreiz zwischen 0 und 10 vorliegt (könnte logarithmisch transformiert werden, z. B. Vergütung). Es gibt zwei Personen, die den Kandidaten das Angebot vorschlagen ("Jill und Jack"). Das eigentliche Modell ist, dass Kandidaten eine Grundakzeptanzrate haben, die mit zunehmendem Anreiz steigt. Es kommt aber auch darauf an, wer das Angebot vorschlägt (in diesem Fall sagen wir, Jill hat eine bessere Chance als Jack). Angenommen, sie fragen zusammen 1000 Kandidaten und sammeln ihre Akzeptanz- (1) oder Ablehnungs- (0) Daten.y=1y=0x

require(faraway)
people = c("Jill","Jack")
proposer = sample(people,1000,replace=T)
incentive = runif(1000, min = 0, max =10)
noise = rnorm(1000,sd=2)
# base probability of agreeing is about 12% (ilogit(-2))
agrees = ilogit(-2 + 1*incentive + ifelse(proposer == "Jill", 0 , -0.75) + noise) 
tt = runif(1000)
observedAgrees = ifelse(tt < agrees,1,0)
glm.logit=glm(observedAgrees~incentive+proposer,family=binomial); summary(glm.logit) 

Aus der Zusammenfassung können Sie ersehen, dass das Modell recht gut passt. Die Abweichung ist (Standard von ist ). Was passt und es schlägt ein Modell mit einer festen Wahrscheinlichkeit (der Unterschied in den Abweichungen beträgt mehrere hundert mit ). Es ist etwas schwieriger zu zeichnen, da es hier zwei Kovariaten gibt, aber Sie haben die Idee. χ 2 χn32χ2 χ 2 22.dfχ22

xs = coef(glm.logit) %*% rbind(1,incentive,as.factor(proposer))
ys = as.vector(unlist(ilogit(xs)))
plot(ys~ incentive, type="n"); require(faraway); grid()
points(incentive[proposer == "Jill"],ys[proposer == "Jill"],col="red")
points(incentive[proposer == "Jack"],ys[proposer == "Jack"],col="blue")

Jill in Red Jack in Blue

Wie Sie sehen, fällt es Jill leichter, eine gute Trefferquote zu erzielen als Jack, aber das verschwindet, wenn der Anreiz steigt.

Sie sollten diesen Modelltyp grundsätzlich auf Ihre Originaldaten anwenden. Wenn Ihre Ausgabe binär ist, behalten Sie 1/0 bei, wenn sie multinomial ist. Sie benötigen eine multinomiale logistische Regression. Wenn Sie der Meinung sind, dass die zusätzliche Varianzquelle nicht der Datenkollektor ist, fügen Sie einen weiteren Faktor (oder eine kontinuierliche Variable) hinzu, was Ihrer Meinung nach für Ihre Daten sinnvoll ist. Die Daten kommen zuerst, zweitens und drittens, erst dann kommt das Modell ins Spiel.

Hans Roggeman
quelle
Ein Kommentar des OP: "Die y-Werte sind Wahrscheinlichkeiten einer bestimmten Klasse, die sich aus der manuellen Mittelwertbildung von Personen ergeben", legt nahe, dass eine logistische Regression für diese Daten ungeeignet wäre - obwohl dies eine großartige Lösung für die Daten sein könnte Rohdaten (wie in Ihrem ersten Absatz vorgeschlagen), abhängig von den "Klassifikationen" und der Art der "Mittelwertbildung". Bei Anwendung auf die in der Frage angezeigten Daten glmwird eine relativ flache, nicht gekrümmte Linie erzeugt, die der in der Frage gezeigten Linie bemerkenswert ähnlich sieht.
whuber
Vielen Dank. Und ja, y ist eine Wahrscheinlichkeit. Ich habe die Rohdaten auch in einer verwandten Frage gepostet: stats.stackexchange.com/questions/83576/… , obwohl ich x genannt habe, wie ich log (x) in der anderen Frage genannt habe ...
Timothée HENRY
Ich wünschte, ich hätte das gewusst, bevor ich ein Muster von Ihrem Bild erhalten habe, LOL!
whuber
5

Das lineare Regressionsmodell ist für die Daten nicht gut geeignet. Man könnte erwarten, aus der Regression so etwas wie das Folgende herauszuholen:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie jedoch erkennen, was OLS tut, ist es offensichtlich, dass Sie dies nicht erhalten. Eine grafische Interpretation gewöhnlicher kleinster Quadrate besteht darin, dass der quadratische vertikale Abstand zwischen der Linie (Hyperebene) und Ihren Daten minimiert wird . Offensichtlich hat die violette Linie, die ich überlagert habe, einige große Residuen von und wieder auf der anderen Seite von 3. Aus diesem Grund passt die blaue Linie besser als die violette.x(7,4.5)

pkofod
quelle
@pkofod Ja, ich verstehe. Also habe ich meinen Kommentar gelöscht (ich wusste, dass Sie wussten, dass er quadratisch ist; andere Leser jedoch möglicherweise nicht).
Peter Flom
1
Die zensierte Regression unterscheidet sich von der Regression mit einer abhängigen Variablen, die auf einen festen bekannten Bereich beschränkt ist. Diese Daten werden nicht zensiert, und die zensierte Regression unterscheidet sich nicht von ihnen von der normalen Regression.
whuber
Ja, mein schlechtes. Diesen Teil gelöscht.
pkofod
4

Da Y durch 0 und 1 begrenzt ist, ist die gewöhnliche Regression der kleinsten Quadrate nicht gut geeignet. Sie könnten die Beta-Regression versuchen. Da Rdrin ist das betaregPaket.

Versuchen Sie so etwas

install.packages("betareg")
library(betareg)
betamod1 <- betareg(y~x, data = DATASETNAME)

Mehr Info

BEARBEITEN: Wenn Sie eine vollständige Darstellung der Beta-Regression mit ihren Vor- und Nachteilen wünschen, lesen Sie Ein besserer Zitronenpresser: Regression mit maximaler Wahrscheinlichkeit mit Beta-verteilten abhängigen Variablen von Smithson und Verkuilen

Peter Flom
quelle
4
Welches Modell wird betaregtatsächlich implementiert? Was sind ihre Annahmen und warum ist es vernünftig anzunehmen, dass sie für diese Daten gelten?
whuber
2
@whuber Es ist eine gute Frage! Das Modell ist auf den Seiten 3 und 4 dieser Vignette definiert . Es basiert auf einer Beta-Dichte, die in Bezug auf Mittelwert- und Präzisionsparameter neu parametrisiert wurde (beide können modelliert werden, jede mit ihrer eigenen Verknüpfungsfunktion), und auf einer Reihe von Verknüpfungsfunktionen, die denen für Binomialmodelle (und einer weiteren) entsprechen. Es wird von ML angepasst und funktioniert sehr ähnlich wie das Anpassen eines GLM.
Glen_b -State Monica
2
@whuber Bedingte Beta-Modelle sind für Kompositionsdaten und andere Proportionen oder Wahrscheinlichkeiten vom kontinuierlichen Typ üblich. Ich weiß nicht, ob die Annahmen für solche Modelle für diese Daten geeignet sind (ich weiß nicht, was die Daten sind, was mein erstes Anliegen wäre, bevor ich selbst ein Modell vorschlage), aber selbst aus der Darstellung stelle ich mir das vor Sie würden genauso gut passen wie andere vorgeschlagene Modelle hier. Es gibt eine Reihe von Modellen in den Antworten, die nicht besser gerechtfertigt zu sein scheinen als Peters Vorschlag, einige mit (nicht immer angegebenen) Annahmen, die schwieriger zu rechtfertigen scheinen.
Glen_b -State Monica
1
Vielen Dank, @Glen_b. Ich fordere Peters Vorschlag nicht heraus - versuche nur, ihn zu verstehen, da ich zuvor noch keine Beta-Regression verwendet habe und ich mir vorstelle, dass sich viele zukünftige Leser in derselben Situation befinden würden. (Ich bin mit den anderen in diesem Thread erwähnten Modellen vertraut genug, um ihre Annahmen und möglichen Mängel zu verstehen!) Es wäre daher schön zu sehen, dass diese Antwort zumindest eine kurze Darstellung der Annahmen und der Gründe für die Empfehlung dieser Lösung enthält.
whuber
1
Ah, ja, ich habe an einer Stelle selbst auf dieses Papier in einer Antwort verlinkt. Smithson (einer der Autoren) hat das Papier auf seiner Webseite . Ergänzendes Material ist hier verlinkt .
Glen_b -State Monica
1

Vielleicht möchten Sie zuerst genau wissen, was ein lineares Modell tut. Es wird versucht, eine Beziehung der Form zu modellieren

Yi=a+bXi+ϵi

ϵi

Wenn Sie wirklich nach einem linearen Modell suchen, können Sie versuchen, Ihre Variablen ein wenig zu transformieren, damit OLS tatsächlich angepasst werden kann, oder einfach ein anderes Modell insgesamt ausprobieren. Vielleicht möchten Sie sich mit PCA oder CCA befassen, oder wenn Sie wirklich ein lineares Modell verwenden möchten, versuchen Sie es mit der Lösung der kleinsten Quadrate , die möglicherweise eine bessere "Anpassung" ergibt, da sie Fehler in beide Richtungen zulässt.

Youloush
quelle
Ich dachte, ich suche ein Minimum für "kleinste Quadrate" für eine lineare Funktion (a + b * x + epsilon). Ich bin verloren.
Timothée HENRY
1
(yabx)2