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

我查看了之前关于同一问题的问题,但找不到任何适合我的解决方案。

Example of graph generated

在对数尺度上绘制原始变量不同于在原始尺度上绘制(拟合回归线)对数变换变量,我们应该做后者以获得所需的结果(绘制拟合回归线使用原始比例中的对数转换变量),使用 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)