【问题标题】:How to plot a linear regression to a double logarithmic R plot?如何将线性回归绘制为双对数 R 图?
【发布时间】:2013-10-27 14:23:21
【问题描述】:

我有以下数据:

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")

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

【问题讨论】:

    标签: r plot regression linear-regression logarithm


    【解决方案1】:
    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")
    

    【讨论】:

    • 我只预测了两个值(一个接近于零,一个非常大)。那么这条线不仅在图中的最小值和最大值之间,而且超出了它们。
    【解决方案2】:

    正在绘制您的线,您只是无法在窗口中看到它,因为值完全不同。当您包含 log='xy' 参数时发生的情况是,图下方的空间(可以这么说)正在被扭曲(拉伸和/或压缩),但是,原始数字仍在使用中。 (想象一下,您正在方格纸上手工绘制这些点;您仍在标记一个点,其中淡蓝色的坐标线(例如,(1,500))交叉,但坐标纸已被连续拉伸,使得线的间距不相等不再。)另一方面,您的模型正在使用转换后的数据。

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

    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")
    

    【讨论】:

    • 有时我讨厌 R,... 似乎没有办法在不操纵原始数据的情况下添加回归线。然后我还必须最小化误差线 (errbar) 和漂亮的轴刻度 (eaxis) 的数据,因为默认情况下也没有实现。
    • 我认为这是 R imho 中的一个错误
    【解决方案3】:

    绘制对数转换的xy,而不是转换坐标轴。

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

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 1970-01-01
      • 2020-11-01
      • 2016-07-09
      • 2021-03-18
      • 2014-02-20
      • 2019-12-06
      • 1970-01-01
      • 2020-11-01
      相关资源
      最近更新 更多