2012-09-22 33 views
14

Vì vậy, tôi hiện đang cố gắng vẽ khoảng tin cậy cho một mô hình tuyến tính. Tôi phát hiện ra tôi nên sử dụng predict.lm() cho điều này, nhưng tôi có một vài vấn đề thực sự hiểu chức năng và tôi không thích sử dụng các hàm mà không biết điều gì đang xảy ra. Tôi tìm thấy một số cách thực hiện về chủ đề này, nhưng chỉ với mã R tương ứng, không có lời giải thích thực sự nào. Đây là chức năng riêng của mình:Predict.lm() trong R - cách lấy các dải dự đoán không ổn định xung quanh các giá trị được gắn

## S3 method for class 'lm' 
predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf, 
     interval = c("none", "confidence", "prediction"), 
     level = 0.95, type = c("response", "terms"), 
     terms = NULL, na.action = na.pass, 
     pred.var = res.var/weights, weights = 1, ...) 

Bây giờ, những gì tôi đã hiểu biết rắc rối:

1) newdata 
    An optional data frame in which to look for variables 
    with which to predict. If omitted, the fitted values are used. 
  • Mọi người dường như sử dụng newdata cho điều này, nhưng tôi không thể hoàn toàn hiểu được lý do tại sao. Để tính toán khoảng tin cậy, tôi rõ ràng cần dữ liệu mà khoảng thời gian này là dành cho (giống như số lần quan sát, trung bình của x vv), vì vậy không thể là ý nghĩa của nó. Nhưng sau đó: Nó có nghĩa là gì?

    2) interval
    Type of interval calculation.

  • okay .. nhưng "none" là để làm gì?

    3a) type
    Type of prediction (response or model term).

    3b) terms
    If type="terms", which terms (default is all terms)

  • 3a: Tôi do đó có thể nhận được khoảng tin cậy cho một biến cụ thể trong mô hình của tôi? Và nếu vậy, 3b là gì? Nếu tôi có thể xác định thuật ngữ trong 3a, nó sẽ không có ý nghĩa để làm điều đó trong 3b một lần nữa .. vì vậy tôi đoán tôi sai một lần nữa, nhưng tôi không thể hiểu tại sao.

Tôi đoán một số bạn có thể nghĩ: Tại sao bạn không thử dùng thử? Và tôi sẽ (ngay cả khi nó có thể sẽ không giải quyết mọi thứ ở đây), nhưng tôi bây giờ không biết làm thế nào để. Vì tôi không phải bây giờ những gì newdata là cho, tôi không biết làm thế nào để sử dụng nó và nếu tôi cố gắng, tôi không nhận được khoảng tin cậy đúng. Bằng cách nào đó nó là rất quan trọng làm thế nào bạn chọn dữ liệu đó, nhưng tôi chỉ không hiểu!

EDIT: Tôi muốn thêm rằng ý định của tôi là hiểu cách predict.làm việc. Bởi vì tôi có nghĩa là tôi không hiểu nếu nó hoạt động theo cách tôi nghĩ. Đó là nó tính toán y-hat (giá trị dự đoán) và hơn sử dụng thêm/trừ cho mỗi upr/lwr-bounds của khoảng thời gian để tính toán một số datapoints (trông giống như một dòng tự tin sau đó) ?? Sau đó, tôi sẽ undestand lý do tại sao nó là cần thiết để có cùng chiều dài trong newdata như trong mô hình tuyến tính.

+0

Phần Chi tiết của tài liệu thảo luận về đối số 'newdata' ở độ dài nào đó. Phần nào của cuộc thảo luận đó vẫn còn khó hiểu? – joran

+0

Tôi đoán đây là điều làm tôi bối rối: "predict đoán.lm tạo ra các giá trị dự đoán, thu được bằng cách đánh giá hàm hồi quy trong khung newdata" (trong phần giải thích chung) và "Nếu newdata bị bỏ qua các dự đoán dựa trên dữ liệu được sử dụng cho Phù hợp." cho newdata. Tại sao tôi sẽ cố gắng để có được khoảng tin cậy mà không được kết nối trong hồi quy thực tế của tôi? Đây là cách tôi hiểu câu này, vì vậy đây là điều làm tôi bối rối. Sau đó, nó giải thích cách thiếu giá trị được xử lý trong trường hợp đó, nhưng tôi đã đấu tranh với phần đầu tiên rồi! – lisa

+2

Bạn có thể quan tâm đến các khoảng _prediction_ cho các quan sát mới. – joran

Trả lời

21

Make up một số dữ liệu:

d <- data.frame(x=c(1,4,5,7), 
       y=c(0.8,4.2,4.7,8)) 

Fit mô hình:

lm1 <- lm(y~x,data=d) 

Niềm tin và dự đoán khoảng thời gian với các giá trị x ban đầu:

p_conf1 <- predict(lm1,interval="confidence") 
p_pred1 <- predict(lm1,interval="prediction") 

Conf. và trước.khoảng thời gian với các giá trị x mới (ngoại suy và mịn hơn/cách đều nhau hơn dữ liệu gốc):

nd <- data.frame(x=seq(0,8,length=51)) 
p_conf2 <- predict(lm1,interval="confidence",newdata=nd) 
p_pred2 <- predict(lm1,interval="prediction",newdata=nd) 

Vẽ tất cả mọi thứ với nhau:

par(las=1,bty="l") ## cosmetics 
plot(y~x,data=d,ylim=c(-5,12),xlim=c(0,8)) ## data 
abline(lm1) ## fit 
matlines(d$x,p_conf1[,c("lwr","upr")],col=2,lty=1,type="b",pch="+") 
matlines(d$x,p_pred1[,c("lwr","upr")],col=2,lty=2,type="b",pch=1) 
matlines(nd$x,p_conf2[,c("lwr","upr")],col=4,lty=1,type="b",pch="+") 
matlines(nd$x,p_pred2[,c("lwr","upr")],col=4,lty=2,type="b",pch=1) 

enter image description here

Sử dụng dữ liệu mới cho phép ngoại suy ngoài bản gốc dữ liệu; Ngoài ra, nếu dữ liệu gốc được chia đều hoặc không đều, khoảng thời gian dự đoán (không phải là đường thẳng) có thể không được xấp xỉ bằng phép nội suy tuyến tính giữa giá trị x ban đầu ...

Tôi không chắc chắn về bạn có nghĩa là "khoảng tin cậy cho một biến cụ thể trong mô hình của tôi"; nếu bạn muốn có khoảng tin cậy trên thông số , thì bạn nên sử dụng confint. Nếu bạn muốn dự đoán cho các thay đổi chỉ dựa trên một số tham số thay đổi (bỏ qua sự không chắc chắn do các tham số khác), thì bạn thực sự muốn sử dụng type="terms".

interval="none" (mặc định) chỉ yêu cầu R không bận tâm tính toán bất kỳ khoảng tin cậy hoặc dự đoán nào và chỉ trả lại giá trị được dự đoán.

+0

Có thể một số cố gắng giải thích sự khác biệt giữa dự đoán và khoảng tin cậy trong một vài từ? Đây là cách tôi hiểu nó: CI cung cấp cho bạn một đầu mối về nơi mà trung bình của dân số được sử dụng có khả năng rơi vào 95% thời gian. Mặt khác, PI không phải về giá trị trung bình, nhưng về giá trị tương lai, đây là giá trị y chưa có trong dữ liệu của bạn. Điều này có đúng không? – lisa

+2

Tôi có thể đề xuất khoảng thời gian dự đoán "" khoảng thời gian "" tin cậy của bạn "'...? câu trả lời là có ... nếu bạn không nhận được những gì bạn cần ở đó, sau đó bạn có lẽ nên hỏi trên http://stats.stackexchange.com, như chúng tôi đã nhận được vượt ra ngoài lĩnh vực lập trình ... cũng: http: : //stackoverflow.com/questions/9406139/r-programming-predict-prediction-vs-confidence –

+0

Tôi đã đọc, cảm ơn – lisa

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