2011-09-07 145 views
28

已知的固定截距我想用在R的LM()函數來計算的線性迴歸此外,我想獲得的迴歸,其中I明確地得到截距lm()的斜率。線性迴歸與R中

我發現一個例子在互聯網上,我試圖讀取R-幫助「?LM」(不幸的是,我無法理解),但我沒有成功。誰能告訴我我的錯誤在哪裏?

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

Thanls爲您提供幫助。

回答

33

你可以減去因變量明確的攔截,然後適應自由截距模型:

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

0 +通過lm抑制攔截的配件。

編輯繪製適合,使用

> abline(intercept, coef(fit)) 

附:在模型中的變量看以錯誤的方式:它通常是y ~ x,不x ~ y(即因變量應該在左邊和右邊的迴歸(S))。

+3

或'I(X - 1.0)〜Y型1' surpresses截距的嵌合爲好。 –

+2

@Joris Meys:是的。我相信這兩種方式是同義詞。我選擇了另一種避免有兩個'-1'項的方法,並且必須解釋哪個是哪個。 – NPE

+0

但是,當我繪製迴歸曲線abline(regExp,col =「green」)時,它不會經過1.我還沒有弄清楚如何從輸出中提取斜率(和/或截距)。對於我來說,似乎你總是必須知道係數數組中值的位置,而不是提取(並且希望該位置是正確的)。那麼,下面的代碼是繪製正確迴歸曲線的「黃金方式」嗎? 'abline(B = COEF(正則表達式)[1]中,a = explicitIntercept,COL = 「綠色」)' –

13

我看到你用我()接受的解決辦法。我原以爲偏移()的解決方案會更明顯,但口味也不盡相同,並通過膠印解決方案的工作後,我可以理解)的我的經濟(溶液:

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

我都用了偏移和我()。因爲您可以設置攔截,所以我還發現抵消更容易(如BondedDust)。

假定截距是10.

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