研我培养 | 常用数据统计分析方法
遨游在学术海洋中的研友们,
在面对数据时是否有时会不知所措,
或是知道用什么分析方法却忘了步骤,
或是忘了函数接口。
别慌,小研整理了一些常用的
数据统计分析方法,
一起来接受数学和算法的洗礼吧!
#1 相关
分析
相关分析是对两个变量之间线性关系的描述与度量,可用相关系数来衡量。对于给定两个变量的样本数据x和y,样本相关系数公式如下:
在对r进行t分布检验显著的前提下,当0<r≤1,表示x和y之间存在正线性相关关系,当-1≤r<0,表示存在负线性相关关系。当|r|≥0.8,可视为高度相关,当0.5≤|r|<0.8,为中度相关,当0.3≤|r|<0.5时,为低度相关,当|r|<0.3,可视为不线性相关。
Python中计算相关系数的函数:
corr = numpy.corrcoef(x, y=None)
#2 方差
分析
方差分析是从观测值的变异角度判断不同总体均值是否相等,以鉴别因素对结果的影响程度。其将样本的总误差分解为组内误差和组间误差,组内误差由随机抽样误差引起,组间误差除了抽样误差还可能包含系统误差。对于单因素方差分析,设因素A有r个水平/组,第i组有ni个观测值,组间误差SA、组内误差SE计算公式如下:
构造F统计量,当F值满足以下条件时,认为总体均值相等,即因素A无显著影响,反之总体均值不等,因素A有显著影响。
Python中用于方差分析的函数:
from scipy.stats import f_oneway
F, p = f_oneway(sample1, sample2, …)
#3 主成分
分析与
因子分析
主成分分析从原始变量中导出少数几个主成分,使其尽可能多地保留原始变量的信息,且彼此互不相关,以此达到降维和数据解释的作用。其思想是选取方差最大的方向作为主成分,通过计算协方差/相关系数矩阵,求出特征根和对应的单位化特征向量,从而得出主成分和对应的贡献率。
因子分析是主成分分析的推广,它将观测随机变量分解为因子的线性组合,包含因子载荷矩阵、公共因子和特殊因子,通过因子旋转为因子寻找合理的解释,用于描述原始变量间的相关关系。
Python中用于主成分分析的函数:
from sklearn.decomposition import PCA
pca = PCA(n_components, copy=True, whiten=False).fit(x)
new_x = pca.transform(x)
pca.components_ #主成分
pca.explained_variance_ratio_ #贡献率
#4 回归
分析
回归分析用于描述被解释变量与解释变量之间的平均关系,常用于预测和控制。回归模型假定零均值、同方差、无自相关、随机扰动项与解释变量不相关、无多重共线性、正态性,模型的矩阵形式可以表示为Y=Xβ+U,参数估计使用最小二乘法。对于一元线性回归模型,参数计算公式如下:
回归方程的显著性检验使用F检验,回归参数的显著性检验使用t检验,拟合效果使用可决系数R2衡量。在一元线性回归的基础上,可推广至多元线性回归、非线性回归。
Python中用于线性回归的函数:
from sklearn.linear_model import LinearRegression
reg = LinearRegression().fit(x, y)
yp = reg.predict(x)
reg.coef_ #系数
reg.intercept_ #截距
#5 时间
序列分析
时间序列分析是根据过去已有数据预测未来结果,多数方法建立在平稳非白噪声时间序列上,可用单位根(DF/ADF)检验序列的平稳性,用LB统计量检验序列的非纯随机性。平稳序列常用ARMA,非平稳序列常用ARIMA,其通过d阶差分使序列平稳。
ARMA/ARIMA是自回归模型AR和滑动平均模型MA的结合。以ARMA为例,根据样本自相关系数ACF和样本偏自相关系数PACF,选择阶数适当的ARMA(p,q),使用极大似然或最小二乘估计参数,拟合后作模型和参数的显著性检验。ARMA模型表示如下:
Python中构建ARIMA的函数:
from statsmodels.tsa.stattools import adfuller, acf, pacf
adf_val, acf_val, pacf_val = adfuller(x), acf(x), pacf(x)
from statsmodels.tsa.arima.model import ARIMA
arima_res = ARIMA(x, order=(p,d,q)).fit()
xp = arima_res.forecast(steps)
#6 判别
分析
判别分析是对样本进行分类,决策树是较常用的方法之一。
决策树从根节点开始判断,直至叶结点,对应一个决策/分类结果。它的构建是一个递归过程,通过最大化信息增益或最小化基尼指数来选择划分属性。样本根据属性测试结果被划分到不同子结点中,并在子树中递归划分,递归返回的条件如下:
(1)当前结点的所有样本属于同一类;
(2)当前属性集为空或样本在所有属性上取值相同;
(3)当前结点包含的样本集为空。
Python中构建决策树的函数:
from sklearn.tree import DecisionTreeClassifier
dtree = DecisionTreeClassifier(criterion='gini', max_depth=None).fit(x, y)
yp = dtree.predict(x)
除了决策树,判别分析常用的方法还有K近邻分类、贝叶斯分类、支持向量机、神经网络等。
#7 聚类
分析
聚类分析是将未知类别的样本划分为几个不相交的簇,每个簇可能对应潜在的概念/类别,K均值聚类是较常用的方法之一。
K均值聚类将样本分为k类,先随机抽取k个样本作为簇中心,计算每个样本到各个簇中心的距离,将其划归到最近的中心所在簇中。根据聚类结果,重新计算簇中心(簇中所有样本的均值向量),再重新分配样本,不断重复直至聚类结果不再改变。聚类结果优劣可用平方误差衡量(所有样本到所在簇心的距离平方)。
Python中K均值聚类的函数:
from sklearn.cluster import KMeans
km = KMeans(n_clusters=8, n_init=3, max_iter=100).fit(x)
km.labels_ #样本类别
km.cluster_centers_ #类别中心
除了基于距离的K均值聚类,聚类分析常用的方法还有基于密度的DBSCAN。
好啦,小研就整理到这里,
希望能对研友们有所帮助。
忽然感觉头顶有点凉,
不说了,去买顶帽子先!
参考资料:
[1]贾俊平.统计学.清华大学出版社
[2]司守奎.数学建模算法与程序.海军航空工程学院
[3]国防科技大学.数学建模与数学实验.https://www.icourses.cn/sCourse/course_3271.html
[4]庞皓.计量经济学.科学出版社
[5]王燕.应用时间序列分析.中国人民大学出版社
[6]周志华.机器学习.清华大学出版社
[7]覃秉丰.机器学习算法基础.https://www.bilibili.com/video/BV1Rt411q7WJ?p=1
推荐阅读
♢End♢
爱你,我们走心。
编辑 / 王金涛
排版 / 张宇甜
校对 / 谭天姝、李若菲
小研知道你 在看 哦