如何使用固定的负截距拟合R中的线性回归?

时间:2017-07-27 09:01:10

标签: r regression

背景:物种丰富度可扩展到体重的负0.75。但是,当我适合我的数据时,我得到的值为0.57。一位朋友告诉我,摘要(lm)结果打印出数据的“最佳拟合”斜率。然而,我想知道我是否可以创建一个回归图,其中我像文献一样强迫斜率为-0.75。

我的代码是:

y值

log.nspecies.dec = c(3.05,2.95,2.97,2.98,2.84,2.85,2.83,2.71,2.64,2.62,2.58,2.37, 2.26,2.17,2.00,1.88,1.75,1.62,1.36,1.30,1.08,1.20,0.90,0.30,0.70, 0.30,0.48,0.00,0.30,0.00)

x值

logbio.dec = c(2.1,2.3,2.5,2.7,2.9,3.1,3.3,3.7,3.9,4.1,4.3,4.5,4.7,4.9,5.1, 5.3,5.5,5.7,5.9,6.1,6.3,6.5,6.7,7.9,7.1,7.3,7.5,7.7,7.9)

绘制条形图并叠加回归线

使用x

命名y变量

names(log.nspecies.dec)= logbio.dec

订购y变量

log.nspecies.dec = log.nspecies.dec [order(as.numeric(names(log.nspecies.dec)))]

做barplot

xpos = barplot(log.nspecies.dec,las = 2,space = 0)

lm.fit = lm(log.nspecies.dec~as.numeric(names(log.nspecies.dec))) 摘要(lm.fit)

y.init = lm.fit $ coefficients [2] * as.numeric(names(log.nspecies.dec))1 +   lm.fit $系数1

y.end = lm.fit $ coefficients [2] * as.numeric(names(log.nspecies.dec))[length(log.nspecies.dec)] +   lm.fit $系数1

段(xpos 1,y.init,xpos [length(xpos)],y.end,lwd = 2,col ='red')

title(main ='ln物种数量〜lm体重')

coef(lm.fit)

给出斜率为0.57的结果。如何将坡度强制为-0.75? enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用offset将y轴截距固定为负值。例如

## Example data
x = 1:10
y = -2 + 2* x

# Fit the model
(m = lm(y ~ 0 + x, offset = rep(-2, length(y))))


#Call:
#lm(formula = y ~ 0 + x, offset = rep(-2, length(y)))

#Coefficients:
#x  
#2  

输出正确地将渐变标识为2.

您的代码无效的原因是您使用的是abline()。查看?abline,它指出要绘制线条,它将依次调用coef(MODEL)。使用偏移量时,coef函数不会返回y轴截距。

R> coef(m)
x 
2 

因此abline划错了界限。

如果截距发生变化,代码仍可正常工作

x = 1:10
y = 2 + 2*x
lm(y ~ 0 + x, offset = rep(2, length(y)))