R语言数学建模(1):Regression analysis

news/2024/11/7 13:38:37/

 某建模萌新半年来学习建模的一些记录加总结

一,linear regression

 对于这样一个有明显线性趋势的数据,我们要找到一条直线使其具备预测该数据走向的能力,采用最小二乘准则(least square estimates)即,拟合出的直线符合残差平方和最小的准则。将上述翻译成数学语言即可得到如下模型

                                                       min\sum _i{}(y_{i}-\hat{y}_{i})^{2}\\ s.t.\quad\hat{y}_{i}=ax_{i}+b

这是一个凸优化问题,我们可以用高等数学的方法将约束条件代入目标函数得到一个无约束优化,再对a,b分别求偏导数,即可得到a与b的估计值,在统计学上可以证明LSE得到的是参数a与b的无偏估计 即                                          E(\hat{a}) = a \quad E(\hat{b}) = b                                                         

 此外,我们对于参数a与b的估计,我们还可以通过极大似然估计(Maxmum Likelihood Estimate)求得,其结果与LSE是一样的。

总离差平方和:SST

                                                           \sum_{i}(y_{i}-\hat{y}_{i})^2

 回归平方和 : SSR                           

                                                            \sum_{i}(y_{i}-\bar{y}_{i})^2

  残差平方和:  SSE           

                                                            \sum_{i}(y_{i}-\hat{y}_{i})^2

 可以证明  三个平方和满足                 SST=SSE+SSR    

根据最小二乘准则,对于不同的模型,可以比较不同模型的残差平方和来选择最优拟合能力的模型

定义拟合优度                                 R^2=1-SSE/SST        SSE越小其值越大,但不会超过1。

supplyment: 在机器学习中,模型的误差,分为训练误差和泛化误差,这里的R方只能反应模型的训练误差,而训练误差小未必该模型就拥有优良的预测能力,即训练误差小不等于泛化误差小。当模型过拟合时,我们就认为其不具备预测数据的能力。具体参考李航的统计机器学习,本文不做详述。在对二维数据进行多项式回归时,使用的多项式次数过高往往会造成过拟合现象(可以想象成插值那种极端情形)。

二,R语言实现+ggplot可视化

 lm函数不仅可以进行一元线性拟合,还可以进行多元线性和非线性拟合。

##输入数据集
x <- c(0.1, 0.11 ,0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.23)
y <- c(42 ,43 ,45 ,45 ,45 ,47.5 ,49 ,53 ,50 ,55 ,55 ,60)
##建立数据框
linear <- data.frame(x,y)
##拟合
model <- lm(y~x,data=linear)
##查看
summary(model)##输出结果Call:
lm(formula = y ~ x, data = linear)Residuals:Min       1Q   Median       3Q      Max 
-2.00449 -0.63600 -0.02401  0.71297  2.32451 Coefficients:Estimate Std. Error t value Pr(>|t|)    
(Intercept)   28.083      1.567   17.92 6.27e-09 ***
x            132.899      9.606   13.84 7.59e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 1.309 on 10 degrees of freedom
Multiple R-squared:  0.9503,    Adjusted R-squared:  0.9454 
F-statistic: 191.4 on 1 and 10 DF,  p-value: 7.585e-08

 模型给出了各参数的估计值 Estimate    y = 28.083+132.899x        可以看到p-value很小,可以认为我们的回归方程是显著的

我们可以用函数 confint(model)得到该模型在2.5%-97.5%范围的置信区间

confint(model)2.5 %    97.5 %
(Intercept)  24.59062  31.57455
x           111.49556 154.30337

可以用ggplot中的geom_smooth函数进行模型的可视化

geom_smooth(data,formula,method,se=T,colour,size)

data~数据集

formula~拟合的法则,可参照lm函数

method~拟合方法        loess:局部加权回归  lm:线性回归 glm:广义线性回归 gam:广义加性回归

colour~线条颜色

size~线条宽度

se~是否添加置信区间,默认为True

ggplot(linear,aes(x=x,y=y))+geom_point(shape=1,colour="black")+##geom_abline(intercept = 28.083,slope=132.899)geom_smooth(method = lm,se = F,colour = "steelblue",size=0.5)+theme(plot.title = element_text(hjust=0.5,size=15))+labs(title="Linear Regression")+theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(),axis.line =element_line(colour = "black"))+annotate("text",x=0.2,y=58,label="y=132.9x+28.08")+annotate("text",x=0.2,y=59,parse=TRUE,  label = "atop(R^2==0.9503)",size=4)

若要拟合的式子为 y=ax^2+b 可用如下代码

x <- c(0.1, 0.11 ,0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.23)
y <- c(42 ,43 ,45 ,45 ,45 ,47.5 ,49 ,53 ,50 ,55 ,55 ,60)
##建立数据框
unlinear <- data.frame(x,y)
model <- lm(y~I(x^2),unlinear)
summary(model)Call:
lm(formula = y ~ I(x^2), data = linear)Residuals:Min       1Q   Median       3Q      Max 
-1.46660 -0.59878 -0.07453  0.32904  2.95051 Coefficients:Estimate Std. Error t value Pr(>|t|)    
(Intercept)  38.3482     0.8144   47.09  4.5e-13 ***
I(x^2)      404.8879    27.5137   14.72  4.2e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 1.234 on 10 degrees of freedom
Multiple R-squared:  0.9559,	Adjusted R-squared:  0.9514 
F-statistic: 216.6 on 1 and 10 DF,  p-value: 4.201e-08

可以看到     此时的 multiple R-squared = 0.9559 竟然比线性模型的0.9503还要高,此时

y = 38.3482+404.8879x^2

在使用lm函数进行非线性拟合时,formula中一定要用到 I()

我们在选择模型时,不光要考虑其训练误差,也要考虑其泛化能力,

对于大样本数据这里给出一个方法,可以将待拟合的数据非为训练集和预测集,训练集用来拟合,再计算模型在预测集上的残差平方和,即可近似认为该误差为其泛化误差。

在机器学习中,常在误差函数中加入惩罚项,即正则化(regularization)来防止过拟合,其原理是使模型参数空间中的参数方差变小(过拟合时往往参数估计的方差很大)

正则化项一般选择       参数向量的L1范式(绝对值)和参数向量的L2范式(平方和开方)

前者称为lasso回归后者称为岭回归,具体参见机器学习相关内容,本文不做阐述

ps:有个东西叫奥卡姆剃刀原理,模型越简单越好(个人理解)

三,multiple regression


http://www.ppmy.cn/news/601494.html

相关文章

R语言完成t-SNE分析和画图

1.编一个数据 需要一个行为样本&#xff0c;列为变量(例如基因)的矩阵。 dat matrix(rnorm(6000),ncol 20) dat[101:200,] dat[101:200,]rnorm(1,10,10) dat[201:300,] dat[201:300,]rnorm(1,15,15) rownames(dat) paste0("a",1:300) colnames(dat) paste0(&…

R语言easier包预测免疫治疗响应

【生信笔记】R语言easier包预测免疫治疗响应 这个包发表于2021年&#xff0c;以患者的RNA序列数据作为输入&#xff0c;来预测免疫治疗的结果。文章的DOI是&#xff1a;doi: 10.1016/j.patter.2021.100293. 用户手册在&#xff1a;http://127.0.0.1:27097/library/easier/doc…

R语言之数据清洗与准备

数据清洗与准备 环境配置 library(mlbench) # 将会使用到包中的BostonHousing数据集 library(funModeling) # 探索性数据分析工具包&#xff0c;本节内容中将会使用到它的status()函数&#xff0c;打印整体数据质量 library(tidyverse) # 数据转化工具包&#xff0c;本节内容…

R语言复习总结

&#xff01;&#xff01;&#xff01;重点&#xff01;&#xff01;&#xff01;&#xff1a;data.frame 绘图 矩阵第一章#R语言是区分大小写的解释型语言 #rm()函数用于删除数据区中的数据第二章#R语言下标从1开始#向量 vector <- c(20173561,1709,20173562,1707)#矩阵 …

R语言 随机森林

关注微信公共号&#xff1a;小程在线 关注CSDN博客&#xff1a;程志伟的博客 R版本&#xff1a;3.6.1 randomForest包&#xff1a;提供randomForest()函数用于随机森林的建立 rflmpute()函数&#xff1a;对数据缺失值进行插补 treesize()函数&#xff1a; 查看模型每颗决策…

TCP三挥四握

TCP三挥四握 TCP最关键的三个步骤&#xff1a;建立连接、数据传输、释放连接&#xff0c;这里的三次握手实现的是服务端和客户端建立连接&#xff1b;四次握手实现的是服务端和客户端释放连接。 三次握手&#xff1a; 建立数据连接 TCP连接需要三次握手的原因&#xff1a; 三次…

【python】蜜蜂算法优化决策树回归的超参数

蜜蜂算法介绍 蜜蜂算法是一种基于蜜蜂的群体行为模拟的解优算法。其灵感来源于蜜蜂在寻找食物、建筑巢穴等任务中的群体行为。蜜蜂算法通过对这种行为的模拟来实现搜索空间中最优解的寻找。 蜜蜂算法的基本思想是&#xff0c;将参数空间视为蜂巢&#xff0c;并在参数空间中展开…

JS逆向系列之猿人学爬虫第16题-window蜜罐

文章目录 目标网站参数定位与加密逻辑分析补全后的jspython调用测试往期逆向文章推荐目标网站 https://match.yuanrenxue.cn/match/16参数定位与加密逻辑分析 t就是时间戳,m是我们主要逆向的参数,跟栈进入window