我有以下数据:
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")
在我的情节中添加回归线的最简单方法是什么?
答案 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")
答案 1 :(得分:3)
不是变换轴,而是绘制由日志变换的x
和y
。
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")