2012-07-02 108 views
5

Tôi muốn vẽ kết quả phân tích hồi quy logistic đa biến (GLM) cho một biến độc lập cụ thể được điều chỉnh (tức là độc lập với các mối liên hệ trong mô hình) kết quả (nhị phân).Vẽ kết quả của mô hình hồi quy logistic đa biến trong R

Tôi đã xem các bài đăng đề xuất phương pháp sau bằng cách sử dụng lệnh predict sau curve, đây là một ví dụ;

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") 

Tuy nhiên điều này dường như không hoạt động đối với các mô hình hồi quy đa biến. Tôi nhận được lỗi sau khi tôi thêm 'tuổi' (tùy ý - có thể là bất kỳ biến có cùng chiều dài) như là một biến nhiễu;

> 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 

Mô hình trên là một phiên bản đơn giản của các mô hình Tôi muốn chạy, nhưng nguyên tắc là như nhau; Tôi muốn vẽ mối quan hệ giữa biến kết quả nhị phân và phơi nhiễm liên tục, độc lập với các yếu tố gây nhiễu..

Thật tuyệt vời để có được giải pháp cho những điều trên hoặc cách khác để xem mối quan hệ mà tôi quan tâm. Rất cám ơn.

+0

Bạn có thể có một cái nhìn tại 'crPlots' chức năng trong 'gói car'. – BenBarnes

+0

@BenBarnes cảm ơn vì điều đó. Tôi đã có một cái nhìn và chơi nhanh với dữ liệu, và chức năng không nhận ra rằng tôi đang làm hồi quy logistic. Tuy nhiên, nếu tôi sử dụng một hồi quy tuyến tính (tức là tiếp xúc của tôi bây giờ là kết quả của tôi, biến nhị phân của tôi là một biến độc lập) thì tôi nhận được chính xác những gì tôi muốn. Bạn sẽ đăng bài này như một câu trả lời cho tôi để chấp nhận, hay tôi? – Luke

+0

Tôi sẽ upvote câu trả lời của Thierry! – BenBarnes

Trả lời

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

Cảm ơn bạn đã trả lời - Tôi phải nêu rõ trong câu hỏi của mình, nhưng tôi đã cung cấp một mô hình đơn giản trong ví dụ của mình. Thực tế có nhiều biến số nhiễu (một số liên tục, các yếu tố khác), và tôi muốn tạo ra mối quan hệ giữa kết quả của tôi (nhị phân) và phơi nhiễm (liên tục), độc lập với các biến khác mà tôi đưa vào mô hình. Bạn có biết ggplot có thể làm được điều này không? Cảm ơn một lần nữa – Luke

+0

@BenBarnes cung cấp một phương pháp tốt để làm điều này với kết quả liên tục; bằng cách chạy một hồi quy tuyến tính với biến nhị phân của tôi như là một tiếp xúc tôi có thể có được một âm mưu tốt đẹp, nhưng đây không phải là khung logistic ban đầu tôi đã sử dụng, do đó, một thay thế cũng sẽ là tuyệt vời. – Luke

+0

@LukeTheDuke: trong trường hợp đó, thiết lập một loạt các giá trị cho biến số lãi suất và sửa tất cả các biến số khác ở một mức độ liên quan. – Thierry

Các vấn đề liên quan