我已經嘗試通過幾種不同的方式將線性方程擬合到具有對數 y 軸的資料。當我使用 stat_poly_line 和 stat_poly_eq 時,我似乎得到了正確的直線和方程。(參見 mtcars 示例)
library(tidyverse)
library(ggpmisc)
mtcars <- mtcars %>%
mutate(mpg10 = 10^mpg) #add column to have something work on logarithmic scale
ggplot(mtcars, aes(x = wt, y = mpg10))
geom_point()
scale_y_continuous(trans='log10') #make y axis logarithmic
stat_poly_line(fullrange = TRUE, se = FALSE)
stat_poly_eq(aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~~~")),
parse=TRUE,label.x.npc = "right")
但是當我使用 lm() 來擬合直線時,我得到了不同的斜率和截距。即使繪圖上繪制的線看起來與使用 stat_poly_line 繪制的線相同。為什么這里的直線方程不正確?我是否呼叫了錯誤的值?或者錯誤地使用 lm()?
model <- lm(log(mtcars$mpg10) ~ mtcars$wt)
ggplot(mtcars, aes(x = wt, y = mpg10))
geom_point()
scale_y_continuous(trans='log10')
stat_smooth(method = "lm", fullrange = TRUE, se = FALSE)
labs(title = paste("R^2 = ",signif(summary(model)$adj.r.squared, 2),
" ",
"y=",signif(model$coefficients[[1]],3 ), signif(model$coefficients[[2]], 3), "x"))
最終,我希望能夠使用 nlme::lmList 來記錄許多單獨線的斜率和截距,但只有正確實作 lm 才能做到這一點。如果我沒有對數 y 軸,它目前似乎只對我有用。
uj5u.com熱心網友回復:
回歸方程是不同的,因為在第一個版本中,stat_poly_eq使用以 10 為底的對數。在第二個版本中,您log(mtcars$mpg10)在模型中使用了自然對數。您需要使用log10它來使其與其他版本保持一致:
model <- lm(log10(mtcars$mpg10) ~ mtcars$wt)
ggplot(mtcars, aes(x = wt, y = mpg10))
geom_point()
scale_y_continuous(trans='log10')
stat_smooth(method = "lm", fullrange = TRUE, se = FALSE)
labs(title = paste("R^2 = ",signif(summary(model)$adj.r.squared, 2),
" ",
"y=",signif(model$coefficients[[1]],3 ),
signif(model$coefficients[[2]], 3), "x"))

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/493103.html
