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

时间:2013-10-27 14:23:22

标签: r plot regression linear-regression logarithm

我有以下数据:

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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

不是变换轴,而是绘制由日志变换的xy

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

答案 2 :(得分:3)

您的 行已被绘制,您无法在窗口中看到它,因为值非常不同。当你包含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")

enter image description here