stat_smooth 和 lm(使用对数)在功率回归中的 R 差异?

R difference between stat_smooth and lm (using log) in power regression?

我有一些数据:

library(ggplot2)    
x <-c(2600248.25,1303899.14285714,1370136.33333333,353105.857142857, 145446.952380952,299032,75142.2631578947,40381.1818181818,6133.93103448276,975.234567901235,779.341463414634)
    y <- c(4,7,6,14,21,9,19,22,29,81,41)

我正在尝试对其进行回归和绘制。我的问题是我想进行回归并根据我的数据绘制它,但是当我对日志值使用 lm 时,预测和绘制与 stat_smooth 相比,我得到了一些不同的结果。考虑代码:

    fit0 <- lm(log(y) ~ log(x))
    summary(fit0)

    newx <- x
    lm.fit <- predict(fit0, newdata = data.frame(x=newx), interval = "confidence")
    df <- as.data.frame(cbind(x,y,lm.fit))

    p <- ggplot(df, aes(x,y)) + geom_point() + geom_smooth(method = "lm", formula ="y~x") + scale_x_log10() + scale_y_log10()

p <- p + geom_line(aes(y=fit)) # result too low
p <- p +  geom_line(aes(y=10^fit)) # result too high

如上所示,我已经尝试使用日志结果并使用 10^x 转换回来。照原样,两个线性模型应该显示相同的值?这里有什么问题,如何获得正确的值?

(我的最终目标是能够绘制预测区间)

您在 ggplot 上使用了 log10 比例,但在 log 上进行了计算。在 R 中仅使用 log() 意味着您使用的是自然对数。当您改用 log10() 时,您会发现 geom_smoothlm 没有区别。由于 ggplot 只是调用 lm 例程,因此预期输出相同。

library(ggplot2)    
x <-c(2600248.25,1303899.14285714,1370136.33333333,353105.857142857, 145446.952380952,299032,75142.2631578947,40381.1818181818,6133.93103448276,975.234567901235,779.341463414634)
y <- c(4,7,6,14,21,9,19,22,29,81,41)

fit0 <- lm(log10(y) ~ log10(x))
summary(fit0)

newx <- x
fit <- predict(fit0, newdata = data.frame(x=newx), interval = "confidence")
df <- as.data.frame(cbind(x,y))

p <- ggplot(df, aes(x,y)) + geom_point() + geom_smooth(method = "lm", formula ="y~x") + scale_x_log10() + scale_y_log10()
p <- p +  geom_line(aes(y=10^fit[,1])) 
p

黑线和蓝线重叠,很难看清。不过,这是输出图:


有关详细信息,请查看 documentation

log computes logarithms, by default natural logarithms, log10 computes common (i.e., base 10) logarithms, and log2 computes binary (i.e., base 2) logarithms. The general form log(x, base) computes logarithms with base base.

运行这段代码,我希望这能回答你的问题,

制作模型

model=lm(y~x,df)

根据我们制作的模型预测 y 值并分配给预测

predicted<-predict(model,newdata = x.df)

为 x 的预测值和实际值绘制图

p<-ggplot(df, aes(x))+ scale_x_log10()+ geom_smooth(method='lm', aes(y=y), col='red')

这条线使真实价值或原始情节

将预测点或数据添加到同一个图中

p<- p+ geom_smooth(method='lm', aes(y=predicted), col='blue')