簡體   English   中英

將對數回歸線添加到散點圖(與Excel進行比較)

[英]add a logarithmic regression line to a scatterplot (comparison with Excel)

在Excel中,很容易擬合給定趨勢線集的對數趨勢線。 只需單擊添加趨勢線,然后選擇“對數”。 切換到R以獲得更大的功率,我對於應該使用哪個函數來生成它感到有些困惑。

為了生成圖形,我將ggplot2與以下代碼配合使用。

ggplot(data, aes(horizon, success)) + geom_line() + geom_area(alpha=0.3)+
  stat_smooth(method='loess')

但是該代碼會進行局部多項式回歸擬合,該擬合是基於對許多小的線性回歸進行平均得出的。 我的問題是Excel中是否使用了R中類似的對數趨勢線。

編輯:我正在尋找的替代方法是獲取形式為y =(c * ln(x))+ b的對數方程; 有一個coef()函數來獲取'c'和'b'嗎?

Edit2:由於我的聲譽更高,所以現在我可以發布更多有關我正在努力做的事情的信息。 讓我的數據是:

0.599885189,0.588404133,0.577784156,0.567164179,0.556257176,0.545350172,0.535112897,
0.52449292,0.51540375,0.507271336,0.499904325,0.498851894,0.498851894,0.497321087,
0.4964600,0.495885955,0.494068121,0.492154612,0.490145427,0.486892461,0.482395714,
0.477229238,0.471010333

上面的數據是y點,而x點只是從1:length(y)開始以1遞增的整數。在Excel中:我可以簡單地繪制它並添加對數趨勢線,結果將是:

在此處輸入圖片說明

黑色為原木。 在R中,如何對以上數據集進行處理?

我更喜歡使用基本圖形而不是ggplot2

#some data with a linear model
x <- 1:20
set.seed(1)
y <- 3*log(x)+5+rnorm(20)

#plot data
plot(y~x)

#fit log model
fit <- lm(y~log(x))
#look at result and statistics
summary(fit)
#extract coefficients only
coef(fit)

#plot fit with confidence band
matlines(x=seq(from=1,to=20,length.out=1000),
         y=predict(fit,newdata=list(x=seq(from=1,to=20,length.out=1000)),
                   interval="confidence"))

在此處輸入圖片說明

#some data with a non-linear model
set.seed(1)
y <- log(0.1*x)+rnorm(20,sd=0.1)

#plot data
plot(y~x)

#fit log model
fit <- nls(y~log(a*x),start=list(a=0.2))
#look at result and statistics
summary(fit)

#plot fit
lines(seq(from=1,to=20,length.out=1000),
      predict(fit,newdata=list(x=seq(from=1,to=20,length.out=1000))))

您可以輕松指定替代的平滑方法(例如lm() ,線性最小二乘擬合)和替代公式

library(ggplot2)
g0 <- ggplot(dat, aes(horizon, success)) + geom_line() + geom_area(alpha=0.3)
g0 + stat_smooth(method="lm",formula=y~log(x),fill="red")

置信帶會自動包括在內:由於它們很窄,我更改了顏色以使其可見。 您可以在stat_smooth使用se=FALSE將其關閉。

在此處輸入圖片說明

另一個答案顯示了如何獲取系數:

coef(lm(success~log(horizon),data=dat))

我可以想象您接下來可能想要將方程式添加到圖形中:請參見在圖形上添加回歸線方程式和R2

我敢肯定,簡單的+ scale_y_log10()會為您提供所需的東西。 GGPlot統計信息是在轉換后計算的,因此,將對數轉換后的數據計算出loess()。

我剛剛在這里寫了一篇博客文章 ,描述了如何精確匹配Excel的對數曲線擬合。 方法的核心圍繞lm()函數:

# Set x and data.to.fit to the independent and dependent variables
data.to.fit <- c(0.5998,0.5884,0.5777,0.5671,0.5562,0.5453,0.5351,0.524,0.515,0.5072,0.4999,0.4988,0.4988,0.4973,0.49,0.4958,0.4940,0.4921,0.4901,0.4868,0.4823,0.4772,0.4710)
x <- c(seq(1, length(data.to.fit)))
data.set <- data.frame(x, data.to.fit)

# Perform a logarithmic fit to the data set
log.fit <- lm(data.to.fit~log(x), data=data.set)

# Print out the intercept, log(x) parameters, R-squared values, etc.
summary(log.fit)

# Plot the original data set
plot(data.set)

# Add the log.fit line with confidence intervals
matlines(predict(log.fit, data.frame(x=x), interval="confidence"))

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM