线性回归在R中具有已知的固定截距

R_U*_*ser 35 regression r linear-regression lm

我想用R中的lm()函数计算线性回归.另外我想得到一个回归的斜率,我明确地给出了截距lm().

我在互联网上找到了一个例子,我试图阅读R-help"?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")
Run Code Online (Sandbox Code Playgroud)

感谢你的帮助.

NPE*_*NPE 39

您可以从回归中减去显式截距,然后拟合无拦截模型:

> intercept <- 1.0
> fit <- lm(I(x - intercept) ~ 0 + y, lin)
> summary(fit)
Run Code Online (Sandbox Code Playgroud)

0 +抑制由截距的装配lm.

编辑要绘制拟合,请使用

> abline(intercept, coef(fit))
Run Code Online (Sandbox Code Playgroud)

PS模型中的变量看起来是错误的:它通常是y ~ x,不是x ~ y(即回归应该在左边,而回归在右边).

  • 或者"I(x - 1.0)~y-1"也表达了对截距的拟合. (4认同)
  • @Joris Meys:是的.我相信这两种方式都是同义词.我选择了另一种方法来避免使用两个`-1`术语并且必须解释哪个是哪个. (2认同)
  • 另请参见`offset`参数. (2认同)

42-*_*42- 15

我看到你已经使用I()接受了一个解决方案.我曾经认为基于偏移()的解决方案会更加明显,但是品味会有所不同,在完成偏移解决方案后,我可以理解I()解决方案的经济性:

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))
Run Code Online (Sandbox Code Playgroud)