代码之家  ›  专栏  ›  技术社区  ›  R_User

如何将线性回归绘制为双对数R图?

  •  4
  • R_User  · 技术社区  · 12 年前

    我有以下数据:

    someFactor = 500
    x = c(1:250)
    y = x^-.25 * someFactor
    

    我在双对数图中显示:

    plot(x, y, log="xy")
    

    现在,我使用线性模型“找出”数据的斜率:

    model = lm(log(y) ~ log(x))
    model
    

    其给出:

    Call:
    lm(formula = log(y) ~ log(x))
    
    Coefficients:
    (Intercept)       log(x)  
          6.215       -0.250  
    

    现在我想把线性回归绘制成一条红线,但abline不起作用:

    abline(model, col="red")
    

    在绘图中添加回归线最简单的方法是什么?

    3 回复  |  直到 12 年前
        1
  •  5
  •   IRTFM    12 年前
    lines(log(x), exp(predict(model, newdata=list(x=log(x)))) ,col="red")
    

    在对数刻度上绘制的x值和用作自变量的log(x)值的范围实际上大不相同。这将为您提供完整的范围:

    lines(x, exp(predict(model, newdata=list(x=x))) ,col="red")
    

    enter image description here

        2
  •  4
  •   gung - Reinstate Monica    12 年前

    您的线路 在绘制时,您无法在窗口中看到它,因为值非常不同。当您将 log='xy' 论点是,情节下方的空间(可以说)正在被扭曲(拉伸和/或压缩),尽管如此,原始数字仍在使用。(想象一下,你正在纸上手工绘制这些点;你仍然在标记一个点,比如(1500)的淡蓝色曲线交叉,但纸已经被连续拉伸,使得这些线不再等距。)另一方面,您的模型正在使用转换后的数据。

    您需要使用与模型相同的转换数据绘制绘图,然后简单地以足够直观的方式重新标记轴。这是第一次尝试:

    plot(log(x), log(y), axes=FALSE, xlab="X", ylab="Y")
    box()
    axis(side=1,     at=log(c(1,2, 10,20, 100,200)), 
                 labels=c(    1,2, 10,20, 100,200))
    axis(side=2,     at=log(c(125,135, 250,260, 350, 500)), 
                 labels=c(    125,135, 250,260, 350, 500))
    abline(model, col="red")
    

    enter image description here

        3
  •  3
  •   Hong Ooi    12 年前

    绘制变换后的日志,而不是变换轴 x y .

    plot(log(x), log(y))
    abline(model, col="red")