2013-07-12 41 views
6

Tôi chạy hồi quy nhiều lần với một số dự đoán liên tục, một vài trong số đó xuất hiện đáng kể và tôi muốn tạo một âm mưu tán xạ hoặc phân tán giống như DV của tôi chống lại một của các dự đoán, bao gồm "đường hồi quy". Tôi có thể làm cái này như thế nào?Vẽ "hồi quy dòng" từ hồi quy nhiều trong R

cốt truyện của tôi trông như thế này

D = my.data; plot(D$probCategorySame, D$posttestScore) 

Nếu nó được hồi quy đơn giản, tôi có thể thêm một đường hồi quy như thế này:

lmSimple <- lm(posttestScore ~ probCategorySame, data=D) 
abline(lmSimple) 

Nhưng mô hình thực tế của tôi là như thế này:

lmMultiple <- lm(posttestScore ~ pretestScore + probCategorySame + probDataRelated + practiceAccuracy + practiceNumTrials, data=D) 

Tôi muốn thêm đường hồi quy phản ánh hệ số và chặn từ thực tế mô hình thay vì mô hình đơn giản hóa. Tôi nghĩ tôi rất vui khi giả định giá trị trung bình cho tất cả những người dự đoán khác để làm điều này, mặc dù tôi sẵn sàng nghe lời khuyên ngược lại.

Điều này có thể không có sự khác biệt, nhưng tôi sẽ đề cập đến trong trường hợp, tình hình hơi phức tạp do thực tế là tôi có thể sẽ không muốn vẽ dữ liệu gốc. Thay vào đó, tôi muốn vẽ các giá trị trung bình của các DV cho các giá trị binned của dự báo, như vậy:

D[,'probCSBinned'] = cut(my.data$probCategorySame, as.numeric(seq(0,1,0.04)), include.lowest=TRUE, right=FALSE, labels=FALSE) 
D = aggregate(posttestScore~probCSBinned, data=D, FUN=mean) 
plot(D$probCSBinned, D$posttestScore) 

Chỉ vì nó xảy ra để nhìn sạch hơn cho dữ liệu của tôi khi tôi làm điều đó theo cách này.

+1

Bạn không thể âm mưu chống lại một dự đoán duy nhất mà không chỉ định giá trị (tĩnh) của tất cả các yếu tố dự đoán khác cho ô đó. Bạn có thể làm rõ những gì bạn muốn hiển thị? –

+0

Làm rõ thêm, cảm ơn. Tôi đoán tôi có xu hướng đi với giả định rằng tất cả các yếu tố dự đoán khác giả định giá trị trung bình của chúng. – baixiwei

Trả lời

4

Bạn cần phải tạo vectơ các giá trị x trong miền của ô của bạn và dự đoán giá trị y tương ứng từ mô hình của bạn. Để làm điều này, bạn cần phải tiêm vectơ này vào một khung dữ liệu bao gồm các biến phù hợp với các biến trong mô hình của bạn. Bạn đã nói rằng bạn ổn với việc giữ các biến khác được cố định ở các giá trị trung bình của chúng, vì vậy tôi đã sử dụng cách tiếp cận đó trong giải pháp của mình. Cho dù giá trị x bạn dự đoán có thực sự là hợp pháp do các giá trị khác trong cốt truyện của bạn có lẽ là điều bạn cân nhắc khi thiết lập điều này hay không.

Không có dữ liệu mẫu Tôi không thể chắc chắn điều này sẽ hoạt động chính xác cho bạn, vì vậy tôi xin lỗi nếu có bất kỳ lỗi nào bên dưới, nhưng điều này ít nhất là minh họa cách tiếp cận.

# Setup 
xmin = 0; xmax=10 # domain of your plot 
D = my.data 
plot(D$probCategorySame, D$posttestScore, xlim=c(xmin,xmax)) 
lmMultiple <- lm(posttestScore ~ pretestScore + probCategorySame + probDataRelated + practiceAccuracy + practiceNumTrials, data=D) 

# create a dummy dataframe where all variables = their mean value for each record 
# except the variable we want to plot, which will vary incrementally over the 
# domain of the plot. We need this object to get the predicted values we 
# want to plot. 
N=1e4 
means = colMeans(D) 
dummyDF = t(as.data.frame(means)) 
for(i in 2:N){dummyDF=rbind(dummyDF,means)} # There's probably a more elegant way to do this. 
xv=seq(xmin,xmax, length.out=N) 
dummyDF$probCSBinned = xv 
# if this gives you a warning about "Coercing LHS to list," use bracket syntax: 
#dummyDF[,k] = xv # where k is the column index of the variable `posttestScore` 

# Getting and plotting predictions over our dummy data. 
yv=predict(lmMultiple, newdata=subset(dummyDF, select=c(-posttestScore))) 
lines(xv, yv) 
+0

Cảm ơn! Cách tiếp cận làm việc ngoại trừ tôi đã phải sử dụng "newdata" thay vì "dữ liệu" bên trong "dự đoán". – baixiwei

+0

Và đôi khi nó nói: Cảnh báo trong termplot (mymodel): 'mô hình' dường như liên quan đến tương tác: xem trang trợ giúp và nó chỉ vẽ một trong các dòng – skan

2

Nhìn vào Predict.Plot chức năng trong gói TeachingDemos cho một lựa chọn để vẽ một yếu tố dự báo so với phản ứng tại một giá trị nhất định của các yếu tố dự báo khác.

6

Để vẽ các cụm từ riêng lẻ trong mô hình tuyến tính tuyến tính hoặc tổng quát (ví dụ: phù hợp với lm hoặc glm), hãy sử dụng termplot. Không cần phải binning hoặc thao tác khác.

# plot everything on one page 
par(mfrow=c(2,3)) 
termplot(lmMultiple) 

# plot individual term 
par(mfrow=c(1,1)) 
termplot(lmMultiple, terms="preTestScore") 
+2

Xin chào. Tôi đã thử termplot và nó lô mỗi một trong một cốt truyện khác nhau.Làm thế nào ca tôi nhận được alltogether trong cùng một đồ họa? – skan

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