统计原理一回归分析
关于回归分析的笔记:
原理理解:
确定两种及两种以上变量相互依赖的定量关系的一种统计分析方法。
步骤:
1)确定目标,也就是因变量。接着确定自变量。可以做散点图观察变量和自变量间的关系。
2)建立回归方程模型:用最小二乘估计,当sse 即离差平方和达到最小的时候确定的自变量系数。
3)相关性分析
一个实际案例:父母的身高是否影响子女的身高?(联系:预估分的高低是否影响考试成绩?)
思考:用t检验,把父母身高分为高矮两组,如果有影响,那么父母身高高的组子女身高应该显著高于父母矮的一组(联系,预估分高的学生考试成绩应该显著高于预估分低的)
这里预估分的高低有很多划分标准,不同标准结果会不同。此时可以用回归分析解决
-
线性回归模型:
假设预测变量和预测值之间存在线性关系。
揭示两个变量之间是否具有相关性,而非因果关系。预测变量:父母身高 预测值:子女身高 误差项:模型无法解释的个体差异 线性回归模型:回归线加上误差项来描述预测值和预测变量之间的关系
一 . 建立线性模型:
[]截距:每当x增加一个单位,y增加的多少。
[]似然:likelyhood,在假设我们的估计就是真实值的情况下,观测到我们手上数据的可能性有多大。相当于一个概率值,当然可能性越大越好。能够衡量这种可能性的函数就叫似然函数,似然最大的点就叫极大似然估计。
[]最小二乘解:极大似然解的几何意义:在所有截距和回归系数的组合中,能够是的误差平方和最小的一组,这个组合就是最小二乘解。
通过极大似然法计算最符合数据的回归线,从而建立因变量与自变量之间的线形模型。
二. 验证模型的合理性
1 . 系数验证:
验证线性模型中自变量和因变量是否具有显著的线性关系——检验回归线的斜率是否为0。此时每个样本对应的似然斜率呈现为一个正态分布,如果这个斜率的方差越小,那么对斜率的估计就越准确。(此处用F检验和t检验)
由于斜率的方差与误差项的方差是正比,与自变量方差成反比。因此,采集数据样本的时候,尽量涵盖自变量所有范围。
在对斜率进行假设检验之后,得到p值和置信区间。如果p>0.05,说明显著,所以拒绝原假设,
-
判别系数 R2
R2=1-误差平方和/总平方和。越接近1越合理。
我们可以通过一次次增加回归因子进行判断取舍,找到最合适的模型。但是最终好的模型需要用新数据检验,也就是预测集(我们回归分析的一大目的就是做预测,所以预测集用于验证)这时用预测集得到的样本外R方,越接近1就说明拟合最好。
如果检测模型中有一个模型R方最高,而该模型下预测集的R方低,说明该模型过拟合。3.其他标准:
修正的R方:越接近1越好
AIC:越小越好
BIC:越小越好
三. 如果结果不显著怎么办?
1.思考统计功效是否足够,想办法多收集数据,尤其距离平均值比较远的数据。
2.影响y的值,不止一个因素,还有其他因素。考虑多元回归。
二元回归:性别做0/1分类
多元线性规划:
先对第一个系数做中心化处理;增加交互因子(x1*x2);
注意:如果某一个因子的系数检测出来不显著,也可能是有其他因子是相互抵消关系,导致结果不显著。
计算方差膨胀因子——VIF: 代表每个自变量与其他自变量的相关性。所以越小越好。
python 操作思路:
1,交叉验证:对训练数据集分成三类做交叉验证
from sklearn.linear_model import LinearRegression
from sklearn.cross_validation import KFold
alg=LinearRegression()
kf=KFold( len ,n_folds=?,random_state=1)
2, 确定特征集
3,应用回归模型进行拟合
predictions=[ ] #定义一个空列表
for train, test in kf:
train_predictors=...
train_target=…
alg.fit=(train_predictors, train_target). #拟合曲线
test_predictions=alg.predict( )
Predictions.append(test_predictions) #将测试结果放入list中
4,特征工程
选择合适的特征作为进行回归拟合