【问题标题】:How to fit a linear regression in R with a fixed negative intercept?如何用固定的负截距拟合 R 中的线性回归?
【发布时间】:2018-01-02 21:38:04
【问题描述】:

背景:物种丰富度与体重的负值 -0.75 成正比。但是,当我拟合我的数据时,我得到的值为 0.57。一位朋友告诉我,summary(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、6.9、7.1、7.3、7.5、7.7、7.9)

绘制条形图并叠加回归线

用 x 命名 y 变量

名称(log.nspecies.dec)= logbio.dec

对 y 变量进行排序

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

做条形图

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$coefficients1

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

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

title(main = 'ln 种数~lm 重量')

系数(lm.fit)

给出斜率为 0.57 的结果。如何将斜率强制为 -0.75?

【问题讨论】:

    标签: r regression


    【解决方案1】:

    您可以使用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)))
    

    【讨论】:

    • 感谢您的回复。但是,当我尝试这段代码时,截距不是-0.75,而是+0.46;偏离文献的正斜率。此外,当您在 m 模型中使用 coef 时,粘贴在控制台上的结果为 +2。您是否知道在示例中键入 coef 时返回的系数为 -2 的方法?我想这就是我问题的答案。谢谢。
    • @TimQuimpo 引用我无权访问的数据集没有帮助。 coef 返回 2 的原因是它返回梯度。
    猜你喜欢
    • 2011-11-12
    • 2022-01-09
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多