2011-09-07 46 views
28

Tôi muốn tính toán hồi quy tuyến tính bằng hàm lm() trong R. Ngoài ra tôi muốn lấy độ dốc của hồi quy, trong đó tôi cho phép chặn một cách rõ ràng lm().Hồi quy tuyến tính với đường chặn cố định đã biết trong R

Tôi tìm thấy một ví dụ trên internet và tôi đã cố gắng đọc R-help "? Lm" (tiếc là tôi không thể hiểu được nó), nhưng tôi đã không thành công. Bất cứ ai có thể cho tôi biết sai lầm của tôi ở đâu?

lin <- data.frame(x = c(0:6), y = c(0.3, 0.1, 0.9, 3.1, 5, 4.9, 6.2)) 
plot (lin$x, lin$y) 

regImp = lm(formula = lin$x ~ lin$y) 
abline(regImp, col="blue") 

# Does not work: 
# Use 1 as intercept 
explicitIntercept = rep(1, length(lin$x)) 
regExp = lm(formula = lin$x ~ lin$y + explicitIntercept) 
abline(regExp, col="green") 

Than phiền giúp bạn.

Trả lời

33

Bạn có thể trừ đi đánh chặn rõ ràng từ regressand và sau đó phù hợp với những mô hình đánh chặn miễn phí:

> intercept <- 1.0 
> fit <- lm(I(x - intercept) ~ 0 + y, lin) 
> summary(fit) 

Các 0 + ngăn chặn sự phù hợp của các đánh chặn bởi lm.

chỉnh sửa Để vẽ phù hợp, sử dụng

> abline(intercept, coef(fit)) 

T.B. Các biến trong mô hình của bạn trông không đúng cách: thường là y ~ x, không phải x ~ y (tức là biến hồi quy nên đi bên trái và (các) biến hồi quy ở bên phải).

+3

hoặc 'I (x - 1,0) ~ y-1' surpresses cho phù hợp của các đánh chặn là tốt. –

+2

@Joris Meys: Có. Tôi tin rằng hai cách là đồng nghĩa. Tôi đã chọn cách khác để tránh có hai từ '-1' và phải giải thích cái nào. – NPE

+0

Nhưng khi tôi vẽ đường cong hồi quy đường cong (regExp, col = "green"), nó không đi qua 1. Tôi chưa tìm ra cách để trích xuất độ dốc (và/hoặc chặn) từ lm ouput. Đối với mee nó có vẻ là bạn luôn luôn phải biết vị trí của các giá trị trong mảng coef, và hơn trích xuất trong (và hy vọng rằng vị trí là đúng). Vì vậy, là đoạn mã sau "đường vàng" để vẽ đường cong hồi quy chính xác? 'abline (b = coef (regExp) [1], a = clearIntercept, col =" green ")' –

13

Tôi thấy rằng bạn đã chấp nhận một giải pháp sử dụng I(). Tôi đã nghĩ rằng một() dựa trên giải pháp bù đắp sẽ được rõ ràng hơn, nhưng thị hiếu khác nhau và sau khi làm việc thông qua các giải pháp bù đắp tôi có thể đánh giá cao nền kinh tế của tôi() giải pháp:

with(lin, plot(y,x)) 
lm_shift_up <- lm(x ~ y +0 + 
         offset(rep(1, nrow(lin))), 
      data=lin) 
abline(1,coef(lm_shift_up)) 
1

Tôi đã sử dụng cả hai bù đắp và tôi(). Tôi cũng tìm thấy bù đắp dễ dàng hơn để làm việc với (như BondedDust) kể từ khi bạn có thể thiết lập đánh chặn của bạn.

Giả sử Intercept là 10.

plot (lin$x, lin$y) fit <-lm(lin$y~0 +lin$x,offset=rep(10,length(lin$x))) abline(fit,col="blue")

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