2010-11-16 20 views
9

Mit predict() kann man den vorhergesagten Wert der abhängigen Variable (y) für einen bestimmten Wert der unabhängigen Variable (x) für ein gegebenes Modell erhalten. Gibt es eine Funktion, die x für eine gegebene y voraussagt?Inverse der 'Predict' Funktion

Zum Beispiel:

kalythos <- data.frame(x = c(20,35,45,55,70), 
    n = rep(50,5), y = c(6,17,26,37,44)) 
kalythos$Ymat <- cbind(kalythos$y, kalythos$n - kalythos$y) 
model <- glm(Ymat ~ x, family = binomial, data = kalythos) 

Wenn wir den vorhergesagten Wert des Modells für x=50 wissen wollen:

predict(model, data.frame(x=50), type = "response") 

Ich möchte wissen, welche x macht y=30, zum Beispiel.

+4

Vorhersage steht immer im Zusammenhang mit einem statistischen Modell. Man braucht eine Verteilung und strukturelle Annahmen, bevor die Variable "vorhergesagt" werden kann. Im Fall von Funktionen wie lm und glm wird angenommen, dass die unabhängigen Variablen fest sind (d. H. Deterministisch), so dass deren Vorhersage bedeutungslos ist.Wenn Sie auf X schließen wollen, müssen Sie einen hierarchischen Ansatz verwenden, um X stochastisch zu machen. Am wahrscheinlichsten werden Sie in einem Bayes'schen Rahmen enden, der Ihnen das posterior für Ihr X gibt, das Sie wiederum für Vorhersagen verwenden können. – VitoshKa

+2

Sie spezifizieren besser, was genau Sie wollen. Mit 1 x ist das machbar. Mit 2 x haben Sie unendlich viele mögliche Antworten. Also frage ich mich wirklich, warum genau Sie die umgekehrte Vorhersage brauchen. Ist es für Kalibrierungszwecke oder so? - Bearbeiten: Siehe auch VitoshKas Kommentar. –

+0

könnten Sie ein inverses Modell erstellen, etwa so etwas wie 'invM1 <- lm (x ~ y, data)' und dann 'predicate' auf Ihrem neuen Prädiktor' y' verwenden. Nun, bevor du einspringst und dies tust, empfehle ich dir zu berücksichtigen, was @vitoshKa oben kommentiert hat. – PavoDive

Antwort

8

Die vorherige Antwort wurde gelöscht. In Ihrem Fall, da n = 50 und das Modell ist binomischen, würden Sie x gegeben y berechnen mit:

f <- function (y,m) { 
    (logit(y/50) - coef(m)[["(Intercept)"]])/coef(m)[["x"]] 
} 
> f(30,model) 
[1] 48.59833 

Aber wenn sie dies tun, sollten Sie besser einen Statistiker konsultieren Sie zeigen, wie die inverse Vorhersageintervall zu berechnen. Und bitte, nehmen Sie die Überlegungen von VitoshKa in Betracht.

1

Sie müssen nur die Regressionsgleichung neu anordnen, aber wie die obigen Kommentare können dies schwierig und nicht unbedingt eine sinnvolle Interpretation sein.

jedoch für den Fall, präsentieren Sie die Sie verwenden können:

(1/coef(model)[2])*(model$family$linkfun(30/50)-coef(model)[1]) 

Hinweis habe ich die Division durch das x Koeffizient zuerst das Namensattribut zu ermöglichen, korrekt zu sein.

0

Für eine schnelle Ansicht (ohne Intervalle und unter Berücksichtigung zusätzlicher Probleme) können Sie die TkPredict-Funktion im TeachingDemos-Paket verwenden. Es tut dies nicht direkt, sondern erlaubt Ihnen, den x-Wert (die x-Werte) dynamisch zu ändern und zu sehen, was der vorhergesagte y-Wert ist, so dass es ziemlich einfach ist, x zu verschieben, bis das gewünschte Y gefunden wird (für gegebene Werte von zusätzlich) x), zeigt dies möglicherweise auch Probleme mit mehreren x, die für das gleiche y funktionieren würden.

0

Das chemcal Paket hat eine inverse.predict()-Funktion, die für Anfälle Form arbeitet y ~ x und y ~ x - 1

1

über diesen alten Thread kam aber dachte, ich würde einige andere Informationen hinzufügen. Paket MASS hat Funktion dose.p für Logit/Probit-Modelle. SE ist via Delta-Methode.

> dose.p(model,p=.6) 
      Dose  SE 
p = 0.6: 48.59833 1.944772 

Montage des inversen Modells (x ~ y) nicht macht hier Sinn, weil, wie @VitoshKa sagt, gehen wir davon aus x fixiert ist und y (die 0/1 response) ist zufällig. Wenn die Daten nicht gruppiert wären, hätten Sie nur zwei Werte der erklärenden Variablen: 0 und 1. Aber obwohl wir annehmen, dass x fest ist, ist es immer noch sinnvoll, ein Konfidenzintervall für die Dosis x für ein gegebenes p zu berechnen , im Gegensatz zu dem was @VitoshKa sagt. Genau wie wir das Modell in Bezug auf ED50 neu parametrisieren können, können wir dies für ED60 oder jedes andere Quantil tun. Parameter sind fest, aber wir berechnen immer noch CI für sie.

Verwandte Themen