数学建模 笔记1:数据处理与拟合模型
本文以datawhale的数学建模教材为课本,文章内容是对应章节的整理。
教材链接:datawhale math-modeling
常见的统计分析模型
回归分析与分类分析
回归分析
回归分析的目的是为了处理多变量间的相关性;
可使用回归分析的前提:自变量为非随机变量,因变量为随机变量;
分类:线性回归分析、逻辑回归分析
线性回归(此处只介绍多元线性回归)
Y
=
a
1
x
1
+
a
2
x
2
+
.
.
.
+
a
n
x
n
+
b
Y = a_1x_1+a_2x_2+...+a_nx_n+b
Y=a1x1+a2x2+...+anxn+b
其中
a
1
,
.
.
.
,
a
n
a_1,...,a_n
a1,...,an代表回归系数,b代表截距。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
import seaborn as sns
from IPython.display import display
import statsmodels.api as sm
# 加载数据
gpa1=pd.read_stata('./data/gpa1.dta')
# 在数据集中提取自变量(ACT为入学考试成绩、hsGPA为高考成绩)
X1=gpa1.ACT
X2=gpa1[['ACT','hsGPA']]
# 提取因变量
y=gpa1.colGPA
# 为自变量增添截距项
X1=sm.add_constant(X1)
X2=sm.add_constant(X2)
display(X2)
# 拟合两个模型
gpa_lm1=sm.OLS(y,X1).fit()
gpa_lm2=sm.OLS(y,X2).fit()
# 输出两个模型的系数与对应p值
p1=pd.DataFrame(gpa_lm1.pvalues,columns=['pvalue'])
c1=pd.DataFrame(gpa_lm1.params,columns=['params'])
p2=pd.DataFrame(gpa_lm2.pvalues,columns=['pvalue'])
c2=pd.DataFrame(gpa_lm2.params,columns=['params'])
display(c1.join(p1,how='right'))
display(c2.join(p2,how='right'))
根据上述代码,我们可以整理出回归方法的思路:
1.提取数据
2.为自变量添加截距,即sm.add_constant函数
3.sm.OLS:最小二乘回归,达到线性回归的效果
4.获取系数
数据结果如下:
此处pvalue提供了系数的P值,用于判断系数的显著性(概统已经快忘光了(汗)),即P<0.05时,可以说明系数对应自变量对于因变量有显著影响,否则不显著。
故根据图像结果可以看出ACT(入学考试成绩)和hsGPA成绩均对GPA会有显著影响。(题目要求可以在教材6.3.1中查询到)
此处需要注意,
p
v
a
l
u
e
(
A
C
T
)
>
p
v
a
l
u
e
(
h
s
G
P
A
)
pvalue(ACT)>pvalue(hsGPA)
pvalue(ACT)>pvalue(hsGPA)的意义在于hsGPA与GPA的相关度比ACT与GPA的相关度高。
分类分析
Logistic回归
逻辑回归的作用:解决二(多)分类的问题;通过sigmoid函数表示分类概率:
g
(
z
)
=
1
1
+
e
−
z
g(z)= \frac{1}{1+e^{-z}}
g(z)=1+e−z1
# 加载基础包
import pandas as pd
import numpy as np
import statsmodels.api as sm
from scipy import stats
# 读取数据
ST=pd.read_csv('./data/ST.csv')
ST.head()
st_logit=sm.formula.logit('ST~ARA+ASSET+ATO+ROA+GROWTH+LEV+SHARE',data=ST).fit()
print(st_logit.summary())
对于逻辑回归,可以直接调用python函数进行处理。结果如下:
同样,根据P值判断显著性,即ARA变量具有显著性。