如何在 r 中执行 loess 回归(附示例)
LOESS 回归,有时称为局部回归,是一种使用局部调整将回归模型拟合到一组数据的方法。
以下分步示例展示了如何在 R 中执行 LOESS 回归。
第 1 步:创建数据
首先,我们在 R 中创建以下数据框:
#view DataFrame df <- data. frame (x=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), y=c(1, 4, 7, 13, 19, 24, 20, 15, 13, 11, 15, 18, 22, 27)) #view first six rows of data frame head(df) xy 1 1 1 2 2 4 3 3 7 4 4 13 5 5 19 6 6 24
步骤 2:拟合多个 LOESS 回归模型
我们可以使用loess()函数将多个 LOESS 回归模型拟合到该数据集,并使用不同的跨度参数值:
#fit several LOESS regression models to dataset
loess50 <- loess(y ~ x, data=df, span= .5 )
smooth50 <- predict(loess50)
loess75 <- loess(y ~ x, data=df, span= .75 )
smooth75 <- predict(loess75)
loess90 <- loess(y ~ x, data=df, span= .9 )
smooth90 <- predict(loess90)
#create scatterplot with each regression line overlaid
plot(df$x, df$y, pch= 19 , main=' Loess Regression Models ')
lines(smooth50, x=df$x, col=' red ')
lines(smooth75, x=df$x, col=' purple ')
lines(smooth90, x=df$x, col=' blue ')
legend(' bottomright ', legend=c(' .5 ', ' .75 ', ' .9 '),
col=c(' red ', ' purple ', ' blue '), pch= 19 , title=' Smoothing Span ')
请注意,我们使用的跨度值越低,回归模型就越不“平滑”,模型就越会尝试拟合数据点。
第 3 步:使用 K 折交叉验证找到最佳模型
为了找到要使用的最佳范围值,我们可以使用caret包中的函数执行k 倍交叉验证:
library (caret)
#define k-fold cross validation method
ctrl <- trainControl(method = " cv ", number = 5 )
grid <- expand. grid (span = seq( 0.5 , 0.9 , len = 5 ), degree = 1 )
#perform cross-validation using smoothing spans ranging from 0.5 to 0.9
model <- train(y ~ x, data = df, method = " gamLoess ", tuneGrid=grid, trControl = ctrl)
#print results of k-fold cross-validation
print (model)
14 samples
1 predictor
No pre-processing
Resampling: Cross-Validated (5 fold)
Summary of sample sizes: 12, 11, 11, 11, 11
Resampling results across tuning parameters:
span RMSE Rsquared MAE
0.5 10.148315 0.9570137 6.467066
0.6 7.854113 0.9350278 5.343473
0.7 6.113610 0.8150066 4.769545
0.8 17.814105 0.8202561 11.875943
0.9 26.705626 0.7384931 17.304833
Tuning parameter 'degree' was held constant at a value of 1
RMSE was used to select the optimal model using the smallest value.
The final values used for the model were span = 0.7 and degree = 1.
我们可以看到,产生最低均方根误差(RMSE) 值的跨度值为0.7 。
因此,对于最终的 LOESS 回归模型,我们会选择在loess()函数中使用值0.7作为跨度参数。
其他资源
以下教程提供有关 R 回归模型的其他信息:
如何在 R 中执行简单线性回归
如何在 R 中执行多元线性回归
如何在 R 中执行逻辑回归
如何在 R 中执行分位数回归
如何在 R 中执行加权回归