2011-09-07 42 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")