2012-07-02 7 views
5

Ich möchte die Ergebnisse einer multivariaten logistischen Regressionsanalyse (GLM) für eine spezifische unabhängige Variablen (dh unabhängig von der Confounders in das Modell aufgenommen) Beziehung mit der Ergebnis (binär).Plotten Sie die Ergebnisse eines multivariaten logistischen Regressionsmodells in R

Ich habe Beiträge gesehen, die die folgende Methode mit dem predict Befehl gefolgt von curve empfehlen, hier ist ein Beispiel;

x  <- data.frame(binary.outcome, cont.exposure) 
model <- glm(binary.outcome ~ cont.exposure, family=binomial, data=x) 
plot(cont.exposure, binary.outcome, xlab="Temperature",ylab="Probability of Response") 
curve(predict(model, data.frame(cont.exposure=x), type="resp"), add=TRUE, col="red") 

Dies scheint jedoch nicht für multivariate Regressionsmodelle zu arbeiten. Ich bekomme den folgenden Fehler, wenn ich "age" (willkürlich - könnte jede Variable der gleichen Länge sein) als eine confounding Variable hinzufügen;

> x  <- data.frame(binary.outcome, cont.exposure, age) 
> model <- glm(binary.outcome ~ cont.exposure + age, family=binomial, data=x) 
> plot(cont.exposure, binary.outcome, xlab="Temperature",ylab="Probability of Response") 
> curve(predict(model, data.frame(cont.exposure=x), type="resp"), add=TRUE, col="red") 
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
    variable lengths differ (found for 'age') 
In addition: Warning message: 
    'newdata' had 101 rows but variable(s) found have 698 rows 

Das obige Modell ist eine vereinfachte Version der Modelle würde ich gerne laufen, aber das Prinzip ist das gleiche; Ich möchte die Beziehung zwischen einer binären Ergebnisvariable und einer kontinuierlichen Exposition, unabhängig von Störfaktoren, darstellen..

Es wäre toll, entweder einen Workaround für das oben genannte zu bekommen, oder eine alternative Möglichkeit, die Beziehung zu sehen, die mich interessiert. Vielen Dank.

+0

Sie können einen Blick auf die 'crPlots' Funktion im' car' Paket haben. – BenBarnes

+0

@BenBarnes danke dafür. Ich habe mir die Daten angeschaut und getippt, und die Funktion erkennt nicht, dass ich logistische Regressionen mache. Wenn ich jedoch eine lineare Regression verwende (dh meine Exposition ist jetzt mein Ergebnis, meine binäre Variable eine unabhängige Variable), dann bekomme ich genau das, was ich will. Werden Sie dies als eine Antwort für mich zu akzeptieren, oder soll ich? – Luke

+0

Ich werde Thierrys Antwort verbessern! – BenBarnes

Antwort

7
set.seed(12345) 
dataset <- expand.grid(Temp = rnorm(30), Age = runif(10)) 
dataset$Truth <- with(dataset, plogis(2 * Temp - 3 * Age)) 
dataset$Sample <- rbinom(nrow(dataset), size = 1, prob = dataset$Truth) 
model <- glm(Sample ~ Temp + Age, data = dataset, family = binomial) 
newdata <- expand.grid(
    Temp = pretty(dataset$Temp, 20), 
    Age = pretty(dataset$Age, 5)) 
newdata$Sample <- predict(model, newdata = newdata, type = "response") 
library(ggplot2) 
ggplot(newdata, aes(x = Temp, y = Sample)) + geom_line() + facet_wrap(~Age) 

enter image description here

ggplot(newdata, aes(x = Temp, y = Sample, colour = Age, group = Age)) + 
    geom_line() 

enter image description here

+1

Danke für die Antwort - ich hätte in meiner Frage angegeben werden sollen, aber ich habe in meinem Beispiel ein vereinfachtes Modell zur Verfügung gestellt. Es gibt tatsächlich zahlreiche verwirrende Variablen (von denen einige kontinuierlich sind, andere Faktoren), und ich möchte die Beziehung zwischen meinem Ergebnis (binär) und einer Exposition (kontinuierlich) visualisieren, unabhängig von den anderen Variablen, die ich in das Modell einbeziehe. Weißt du, ob ggplot das kann? Nochmals vielen Dank – Luke

+0

@BenBarnes bietet eine gute Methode, dies mit kontinuierlichen Ergebnissen zu tun; Indem ich eine lineare Regression mit meiner binären Variablen als Exposure durchführe, kann ich einen schönen Plot bekommen, aber das ist nicht der ursprüngliche logistische Rahmen, den ich benutzte, also wäre auch eine Alternative großartig. – Luke

+0

@LukeTheDuke: In diesem Fall einen Bereich von Werten für die interessierende Kovariate festlegen und alle anderen Kovariaten auf einer relevanten Ebene fixieren. – Thierry