4

我有以下数据:

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

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

4

3 回答 3

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

在此处输入图像描述

于 2013-10-27T15:03:14.407 回答
4

正在绘制您的线,您只是无法在窗口中看到它,因为值完全不同。当您包含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")

在此处输入图像描述

于 2013-10-27T15:07:02.253 回答
3

而不是变换轴,绘制对数变换的xy

plot(log(x), log(y))
abline(model, col="red")
于 2013-10-27T15:05:38.213 回答