为了完整性,还行把R语言的部分补上。具体更多参数和原理的介绍,可以参考《一元线性回归分析Python》。这一篇还是使用之前的电商数据来演示。
如果需要数据进行使用,可以直接复制下面连接到浏览器就可以下载数据了↓
https://linss.oss-cn-beijing.aliyuncs.com/Excel/data_20240615.xlsx

直接读取数据↓
data <- read.delim("clipboard")
在进行回归分析之前,先对数据进行可视化和基本统计分析↓
library(ggplot2)
library(sysfonts)
library(showtextdb)
library(showtext)
showtext_auto()
# 绘制散点图
ggplot(data, aes(x = 广告投入, y = 销售额)) +
geom_point() +
ggtitle('广告费用与销售额的散点图') +
xlab('广告投入') +
ylab('销售额')

通过散点图,我们可以初步判断广告费用和销售额之间存在明显的线性关系。接下来就可以进行一元线形回归模型建立了,使用lm函数就可以直接建模了↓
# 构建模型
model <- lm(销售额 ~ 广告投入, data = data)
# 输出详细统计参数
summary(model)
然后使用summary函数就可以查看模型的各种参数了↓

library(lmtest)
dwtest(model)
Durbin-Watson test
data: model
DW = 1.8598, p-value = 0.239
alternative hypothesis: true autocorrelation is greater than 0
Durbin-Watson统计量用于检测残差的自相关性。取值范围为0到4,接近2表示没有自相关,接近0或4表示存在正自相关或负自相关。这里的结果是1.85,因为是一元回归,可以不参考,但可以了解。
图形化的展示可以帮助我们更直观地理解模型的拟合效果和残差分布。以下是一些常用的图形以及它们的作用和判断标准。
【散点图与回归线】
散点图用于展示自变量和因变量之间的关系,而回归线则显示模型的拟合效果↓
ggplot(data, aes(x = 广告投入, y = 销售额)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "red") +
ggtitle('广告费用与销售额的散点图及回归线') +
xlab('广告费用') +
ylab('销售额')

【残差图】
残差图用于检验残差的分布情况。如果残差随机分布且无明显模式,说明模型的假设较好↓
residuals <- residuals(model)
fitted <- fitted.values(model)
ggplot(data, aes(x = fitted, y = residuals)) +
geom_point() +
geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
ggtitle('残差图') +
xlab('拟合值') +
ylab('残差')

【Q-Q图(Quantile-Quantile Plot)】
Q-Q图用于检验残差是否符合正态分布。若点基本落在参考线上,说明残差近似正态分布↓
qqnorm(residuals)
qqline(residuals, col = "red", lwd = 2)

【残差直方图】
残差直方图用于观察残差的分布形态,是否近似正态分布↓
hist(residuals, breaks = 20, main = "残差直方图", xlab = "残差", col = "lightblue")

【标准化残差图】
识别异常值和高杠杆值,进一步检查模型的适用性。判断标准:标准化残差应在范围 [−3,3] 内,若超出此范围,则可能存在异常值。
# 计算标准化残差
standardized_residuals <- rstandard(model)
# 绘制标准化残差图
plot(fitted, standardized_residuals, main = "标准化残差图", xlab = "拟合值", ylab = "标准化残差")
abline(h = 0, col = "red", lwd = 2, lty = 2)

最后是数据的预测,在判断模型都没有问题后,就可以进行预测了↓
new_data <- data.frame(广告投入 = c(20, 30, 40))
# 进行预测
predictions <- predict(model, new_data)
# 将预测结果添加到数据框中
new_data$销售额预测 <- predictions

End