2013-10-09 11 views
5

Ich habe ein Problem, das ich versuche, ohne Erfolg zu lösen. Mehr als zwei Tage suchen und ich habe keinen einzigen Hinweis bekommen. Tut mir leid, wenn die Antwort da draußen ist und ich es nicht gefunden habe.Wie kann ich die Vorhersagefunktion in R in einer vor Jahren angepassten logistischen Regression verwenden?

Angenommen, Sie haben eine logistische Gleichungsregression (binäres Modell) von einem alten Modell, das Sie vor einigen Jahren geschätzt haben. Daher kennen Sie die Parameter βk (k = 1, 2, ..., p), weil sie in der Vergangenheit geschätzt wurden. Aber Sie haben nicht die Daten, die verwendet wurden, um das Modell zu passen.

Meine Frage ist: Kann ich dieses alte geschätzte logistische Modell in R als ein Objekt (entsprechend einem logistischen Regressionsmodell) einführen?

Ich möchte die "Vorhersage" -Funktion verwenden, um diese logistische Regression mit einem neuen Datensatz (aktuelle Daten) zu beweisen und dann die Gültigkeit dieses alten Modells zu überprüfen. Um diese Funktion nutzen zu können, benötigen Sie das Objekt des logistischen Regressionsmodells.

Vielen Dank im Voraus.

+0

Diese Frage Wegthema zu sein scheint, weil es über Statistiken. Vielleicht sollte es nach [Cross Validated] (http://stats.stackexchange.com) migriert werden. – Thomas

+7

Der Benutzer versucht eine Gleichung, die er hat, in ein Objekt umzuwandeln. Dies ist eine ziemlich Programmierfrage, ich denke, es passt so gut. –

+0

Ich würde wahrscheinlich ein vorhandenes Modell ändern, aber das ist Betrug. –

Antwort

6

Per meinem Kommentar, ich denke, Sie könnten damit beginnen, Vorhersagen direkt aus den Koeffizienten zu berechnen. Hier ist ein Beispiel, das die Ausgabe von predict.glm zu vorhergesagten Wahrscheinlichkeiten berechnet direkt auf den Daten vergleicht:

# construct some data and model it 
# y ~ x1 + x2 
set.seed(1) 
x1 <- runif(100) 
x2 <- runif(100) 
y <- rbinom(100,1,(x1+x2)/2) 
data1 <- data.frame(x1=x1,x2=x2,y=y) 
x3 <- runif(100) 
x4 <- runif(100) 
y2 <- rbinom(100,1,(x3+x4)/2) 
data2 <- data.frame(x1=x3,x2=x4,y=y2) 
glm1 <- glm(y~x1+x2,data=data1,family=binomial) 

# extract coefs 
#summary(glm1) 
coef1 <- coef(glm1) 

# calculate predicted probabilities for current data 
tmp1 <- coef1[1] + (data1$x1*coef1[2]) + (data1$x2*coef1[3]) 
pr1 <- 1/(1+(1/exp(tmp1))) 
# these match those from `predict`: 
all.equal(pr1,predict(glm1,data1,type='response')) 

# now apply to new data: 
tmp2 <- coef1[1] + (data2$x1*coef1[2]) + (data2$x2*coef1[3]) 
pr2 <- 1/(1+(1/exp(tmp2))) 
pr2 

Dies ist natürlich nicht eine allgemeine Lösung, auch nicht richtig Unsicherheit umgehen, aber ich denke, es ist ein besserer Ansatz als predict Hacking .

+0

Gutes Setup - Ich würde versucht sein, 'qqplot' des Datensatzes im Vergleich zu den" simulierten "Daten dieses Modells auszuführen. –

5

Sie können eine Glm-Anpassung mit nur einem Offset erstellen, der aus den vorhandenen Koeffizienten erstellt wurde, und dann die reguläre Vorhersagefunktion verwenden. Zum Beispiel der Irisdaten (zunächst ein Modell auf den realen Daten passend, dann ein neues Modells mit Dummy-Daten und die Koeffizienten von dem ersten Fitting):

fit1 <- glm(I(Species=='versicolor') ~ Petal.Length + Petal.Width, 
    data=iris, family=binomial) 
coef(fit1) 

dummydata <- data.frame(Petal.Length = rnorm(10), Petal.Width=rnorm(10), 
    Species = rep(c('versicolor','other'), each=5)) 

fit2 <- glm(I(Species=='versicolor') ~ 0 + 
    offset(-2.863708 + 1.563076*Petal.Length - 3.153165*Petal.Width), 
    data=dummydata, family=binomial) 

pred1 <- predict(fit1, newdata=iris) 
pred2 <- predict(fit2, newdata=iris) 
plot(pred1,pred2) 
abline(0,1, col='green')