多项式回归的原理与操作

文摘   2024-10-12 09:43   北京  


PSYCH统计实验室


原理

当我们拥有包含一个自变量和一个因变量的数据集时,通常使用简单线性回归来量化两者之间的关系。然而,简单线性回归假设自变量和因变量之间的关系是线性的。用数学符号表示为:

Y = β0 + β1X + ε

其中,Y是因变量,X是自变量,β0是截距项,β1是系数,ε是随机误差。

但在实际中,自变量和因变量之间的关系可能是非线性的,因此使用线性回归会导致模型的拟合效果较差。解决自变量和因变量之间非线性关系的一种方法是使用多项式回归 (Polynomial Regression),用数学符号表示为:Y = β0 + β1X + β2X² + … + βhXʰ + ε

在这个方程中,h 是多项式的次数。随着 h 值的增加,模型能够更好地拟合非线性关系。


什么时候使用多项式回归


当自变量与因变量之间的关系为非线性时,我们会使用多项式回归。

1

散点图

检测非线性关系最简单的方法是绘制自变量与因变量的散点图。

例如,如果创建如下散点图,可以看到两个变量之间的关系大致呈线性,因此线性回归在这种数据上可能会有较好的表现。

如果散点图中两个变量之间的关系是非线性的,则应该使用多项式回归。

2

残差与拟合值图

另一种检测非线性关系的方法是对数据拟合一个简单线性回归模型,然后生成残差与拟合值的图。

如果残差大致均匀分布在零附近且没有明显的规律,那么简单线性回归可能已经足够。

然而,如果残差在图中表现出非线性模式,这就表明自变量与因变量之间的关系可能是非线性的。

3

计算模型的 R² 

回归模型的 R² 值表明了因变量的变异中有多少百分比可以被自变量解释。

如果对数据集拟合了一个简单线性回归模型,但模型的 R² 值较低,这可能表明自变量与因变量之间的关系比简单的线性关系更为复杂,因此需要尝试使用多项式回归。

4

多项式回归的偏差-方差权衡

使用多项式回归时,存在Bias-Variance权衡。随着多项式次数的增加,偏差会减少,但方差会增加。与所有机器学习模型一样,研究者必须找到偏差和方差之间的最佳权衡。在大多数情况下,适当增加多项式的次数会有所帮助,但超过某个值后,模型开始拟合数据中的噪声,mean squared error反而会增加。为了选择最优模型,研究者通常使用 k 折交叉验证来选择 MSE 最小的模型。

操作


library(ggplot2)


set.seed(1)


# 创建数据集

df <- data.frame(hours = runif(50, 5, 15), score=50)

df$score = df$score + df$hours^3/150 + df$hours*runif(50, 1, 2)


# 查看生成的数据

head(df)

#      hours    score

# 1  7.655087 64.30191

# 2  8.721239 70.65430

# 3 10.728534 73.66114

# 4 14.082078 86.14630

# 5  7.016819 59.81595

# 6 13.983897 83.60510



# 绘制散点图

ggplot(df, aes(x=hours, y=score)) +

  geom_point()


# 将数据集随机打乱

df.shuffled <- df[sample(nrow(df)),]


# 参数设置

K <- 10 

degree <- 5


# 将数据划分为十份

folds<- cut(seq(1,nrow(df.shuffled)),breaks=K,

labels=FALSE)


# 创建 MSE 存储矩阵

mse = matrix(data=NA,

nrow=K,ncol=degree)


# 进行 k 折交叉验证

for(i in 1:K){

  testIndexes <- which(folds==

i,arr.ind=TRUE)

  testData <- df.shuffled[testIndexes, ]

  trainData <- df.shuffled[-testIndexes, ]

  for (j in 1:degree){

    fit.train = lm(score ~ 

poly(hours,j), data=trainData)

    fit.test = predict(fit.train, newdata

=testData) mse[i,j]=mean

((fit.test- testData$score)^2) 

  }

}


# 计算每个多项式次数的平均 MSE

colMeans(mse)

# 9.886172  8.589655  9.439514 

10.214915 12.745574


# 根据结果可知,2此项的MSE值最小,

为8.589655

best = lm(score ~ poly(hours,2, 

raw=T), data=df)


# 绘制最终的结果图

ggplot(df, aes(x=hours, y=score)) + 

  geom_point() +

  stat_smooth(method='lm', formula = 

y ~ poly(x,2), size = 1) + 

  xlab('Hours Studied') +

  ylab('Score')



参考内容

Bobbitt, Z. (2020, November 18). An Introduction to Polynomial Regression. Statology. https://www.statology.org/polynomial-regression/


PSYCH统计实验室

通知公告

网络分析课程目前开放视频课啦

单次课200元/讲(学生),250元/讲(非学生)

共有四讲内容:

①横断面网络分析简介与基础

②网络分析与因子分析

③交叉滞后网络分析

④时间序列网络分析

购买后开放视频权限14天,可多次申请。

并赠送所有课程相关资料(无PPT)

如果想申请购买,请联系M18812507626


更多资讯

关注我们

文稿:Ns

排版:Little Star

责编:Wink
审核:摘星

本文由“Psych统计自习室”课题组原创,欢迎转发至朋友圈。如需转载请联系后台,征得作者同意后方可转载。

Psych统计自习室
大家好,我们是由来自北京师范大学,西南大学,天津医科大学等高校在读硕士、博士研究生组成的一个科研团队——Psych统计自习室。Psych统计自习室旨在关注心理学、精神病学领域的最前沿的系列研究,并做前沿统计知识的分享。
 最新文章