在 R 中用对数轴拟合回归线图
Fitting a regression line to graph with log axes in R
我正在尝试制作一个带有对数轴的简单主体 size/weight 回归图,但我似乎无法在图中拟合直线回归线。
我试过使用 untf 函数,但没有生成任何行。
这是我正在尝试的简化示例:
plot(Average.BL~Wet.weight, log="xy")
reg=lm(log(Average.BL)~log(Wet.weight))
abline(reg, untf=FALSE)
我查看了之前关于同一问题的问题,但找不到任何适合我的解决方案。
在对数尺度上绘制原始变量不同于在原始尺度上绘制(拟合回归线)对数变换变量,我们应该做后者以获得所需的结果(绘制拟合回归线使用原始比例中的对数转换变量),使用 mtcars 数据集的示例:
plot(log(mtcars$mpg)~log(mtcars$wt)) # plot the log-transformed variables, not in log-scale
reg=lm(log(mtcars$mpg)~log(mtcars$wt))
abline(reg, untf=F)
另一种选择是以对数比例绘制所有内容,但在原始比例中拟合回归线。
plot(mtcars$mpg~mtcars$wt, log="xy")
reg=lm(mtcars$mpg~mtcars$wt)
abline(reg, untf=T)
当我们想将对数尺度图与回归拟合与对数变换结合起来时,用 OLS 计算的截距不是对数尺度,所以我想我们需要用它做一些对数变换,但是它生成下面的图,直线的斜率正确但偏移量错误。
plot(mtcars$mpg~mtcars$wt, log="xy")
reg=lm(log(mtcars$mpg)~log(mtcars$wt))
abline(log(reg$coefficients[1]), reg$coefficients[2], untf=F)
我发现如果我生成对数转换数据的线性回归,如下所示:
plot(logWet.weight~logAverageBL, data=mtrosslog)
reg<-lm(logWet.weight~logAverageBL, data=mtrosslog)
Call:
lm(formula = logWet.weight ~ logAverageBL, data = mtrosslog)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.73798 0.11997 -31.16 <2e-16 ***
logAverageBL 2.86705 0.09002 31.85 <2e-16 ***
然后生成一个带有对数-对数轴的图,我可以将对数转换数据 (reg) 生成的回归拟合到这个未转换数据图:
plot(Wet.weight~Average.BL, data = mtross, log = 'xy')
ablineclip(reg)
您仍然可以将回归线直接绘制到双对数图。您只需要对日志使用基数 10(因为这是用于对数对数图的)。
plot(mtcars$mpg~mtcars$wt, log="xy")
reg=lm(log(mtcars$mpg,base=10)~log(mtcars$wt,base=10))
abline(reg, untf=F)
resulting figure
除了之前的答案,如果你想保留轴刻度标签的原始比例,你可以使用以下代码:
plot(log(Average.BL) ~ log(Wet.weight), axes = FALSE)
axis(1, at = axTicks(1),
labels = round(exp(axTicks(1)), 1))
axis(2, at = axTicks(2),
labels = round(exp(axTicks(2)), 1))
box()
reg=lm(log(Average.BL)~log(Wet.weight))
abline(reg)
我正在尝试制作一个带有对数轴的简单主体 size/weight 回归图,但我似乎无法在图中拟合直线回归线。
我试过使用 untf 函数,但没有生成任何行。
这是我正在尝试的简化示例:
plot(Average.BL~Wet.weight, log="xy")
reg=lm(log(Average.BL)~log(Wet.weight))
abline(reg, untf=FALSE)
我查看了之前关于同一问题的问题,但找不到任何适合我的解决方案。
在对数尺度上绘制原始变量不同于在原始尺度上绘制(拟合回归线)对数变换变量,我们应该做后者以获得所需的结果(绘制拟合回归线使用原始比例中的对数转换变量),使用 mtcars 数据集的示例:
plot(log(mtcars$mpg)~log(mtcars$wt)) # plot the log-transformed variables, not in log-scale
reg=lm(log(mtcars$mpg)~log(mtcars$wt))
abline(reg, untf=F)
另一种选择是以对数比例绘制所有内容,但在原始比例中拟合回归线。
plot(mtcars$mpg~mtcars$wt, log="xy")
reg=lm(mtcars$mpg~mtcars$wt)
abline(reg, untf=T)
当我们想将对数尺度图与回归拟合与对数变换结合起来时,用 OLS 计算的截距不是对数尺度,所以我想我们需要用它做一些对数变换,但是它生成下面的图,直线的斜率正确但偏移量错误。
plot(mtcars$mpg~mtcars$wt, log="xy")
reg=lm(log(mtcars$mpg)~log(mtcars$wt))
abline(log(reg$coefficients[1]), reg$coefficients[2], untf=F)
我发现如果我生成对数转换数据的线性回归,如下所示:
plot(logWet.weight~logAverageBL, data=mtrosslog)
reg<-lm(logWet.weight~logAverageBL, data=mtrosslog)
Call:
lm(formula = logWet.weight ~ logAverageBL, data = mtrosslog)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.73798 0.11997 -31.16 <2e-16 ***
logAverageBL 2.86705 0.09002 31.85 <2e-16 ***
然后生成一个带有对数-对数轴的图,我可以将对数转换数据 (reg) 生成的回归拟合到这个未转换数据图:
plot(Wet.weight~Average.BL, data = mtross, log = 'xy')
ablineclip(reg)
您仍然可以将回归线直接绘制到双对数图。您只需要对日志使用基数 10(因为这是用于对数对数图的)。
plot(mtcars$mpg~mtcars$wt, log="xy")
reg=lm(log(mtcars$mpg,base=10)~log(mtcars$wt,base=10))
abline(reg, untf=F)
resulting figure
除了之前的答案,如果你想保留轴刻度标签的原始比例,你可以使用以下代码:
plot(log(Average.BL) ~ log(Wet.weight), axes = FALSE)
axis(1, at = axTicks(1),
labels = round(exp(axTicks(1)), 1))
axis(2, at = axTicks(2),
labels = round(exp(axTicks(2)), 1))
box()
reg=lm(log(Average.BL)~log(Wet.weight))
abline(reg)