[英]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.