回归分析算法基本原理及编程
回归分析算法基本原理及编程
回归和相关性分析的区别?
相关性分析只是判定变量和变量之间有无关联
回归分析构建关系和关系之间具体的关系式子,用一个函数或者方程来拟合这个关系式子
采用任何模型都要有原因
回归方程 是不是和所有的X都产生关系呢?
逐步回归方法是一种挑选哪些因素和因变量产生关系。
要突出模型的缺点。
一 、一元线性回归
1.数学模型
一元方程就可以构建出来,哪一条线才是我们回归拟合度最高的呢?
一元线性方程中只有两个未知参数a、b
Question1:只需要两组参数,方程就可以求出。但表格中已经给了16组,这样会导致求a和b浪费,肯定会存在多余解,我们希望哪一个解是最好的?
我们拟合的方程应该和我们实际拟合的差越小越好。
Question:2:如何和我们的a与b联系起来呢?
我们可以用最小二乘。
你肯定能够找出β0和β1,但是你如何确定他是我们要找的,我们一定要对它做假设检验。
可以做预测和控制。回归有两种主要用途?做预测和控制。
1.最小二乘法
如果我们的模型估计量β0和β1已经知道了,我们可以拿出来算算预测值y和我们真实值的差大不大,如果差值很小,那么就是正确的。
$$ Q=\sum_{i=1}^{n}\left(Y_{i}-\hat{Y}_{i}\right)^{2}=\sum_{i=1}^{n}\left(Y_{i}-\left(\hat{\beta}_{0}+\hat{\beta}_{1} X_{i}\right)\right)^{2} $$我们可以计算出n个误差。让这个方程Q求得最小。
Question1:如何求一个二次方程的极值?
求导即可。导函数等于零即为极函数存在的位置。
Question:函数只有什么才能求导?
连续才能求导。
question:不连续怎么求导?
虽然不连续,但是我们依然可以把xy这些点的值代入到这里
得到离差形式的估计值:
2.检验预测和控制
2.1回归方程的显著性检验
Question:什么是显著性水平?
估计总体参数落在某一个区间可能犯错的一个概率
Question:显著性水平一般取多少?
0.05,因为在一个正态分布中两个标准差的概率是百分之95,往外扩的概率是非常小的,但是如果很小的事情发生了,我们就拒绝这个。这就是假设检验。通过小规模的统计发现小规模的事件发生的概率。
0假设检验:如果β1=0就说明y和x无关,说明不存在回归方程。如果我们通过方法把0假设检验pass掉了,就说明这个假设检验存在一个回归方程。假设0假设检验通过了,就说xy二者无关系。
方差齐次性检验:通过分析发现样本方差和总体的方差服从F分布。n1是分子自由度,n2是分母自由度。 n1 = k,n0 = n1-k-1.如果你求得的F值大于我们在这个自由度下面最大的F值。就说明
本来大于这个F1-α的概率就是很小的,你求得的居然比这个还大,就说明之前的假设是不对的。我们就可拒绝。“小概率事件是几乎不可能发生的,但是你通过一次实验就出现了这种小概率事件,你原来所做的假设是不合理的。”
举个例子:比如我们学校考上清华北大是不可能的,690分是5%的概率。但是我们有几个同学考了700,720.我们就认为这种小概率的事件发生了,就说明我们之前的假设是错误的,我们学校考上清华北大是可能的。
如果拒绝了,说明你的回归方程非常的好。
单侧检验双侧检验在1-α的条件下,α一般是取95%。
r没有表,构建与F的关系
2.2回归系数的置信区间
方差的置信区间:
2.3检测与控制
预测范围:
2.4可线性化的一元非线性回归( 曲线回归)
发现单纯用线性方程不合理,所以我们需要非线性方程
这是一个一元非线性方程存在吗?
y = 1/x 或者 y = ex 或者y = sinx
非线性方程,就是因变量与自变量之间的关系不是线性的关系,这类方程很多,例如平方关系、对数关系、指数关系、三角函数关系等等。
利用一元非线性来拟合的时候,
如果有一条曲线如下图所示,拟合度会更高一些,肯定比我的线性要好的多。
我们在拟合的时候首先要找出一个符合哪一个非线性走向。
二、多元线性回归
1.数学模型及定义
2.模型参数估计
令 x2 = x2 x3 = x3 ... 变为多元线性回归模型
3.多元线性回归中的检验与预测
3.1检验
之前这个地方一元的时候是,因为一元线性回归方程只有一个未知量所以说k= 1,即 n - k -1 = n- 2。但是我们现在是多元的。
3.2预测
这时回归方程已经建立起来了,所以此时你给我一组x我就能够求出一个y来。可以做到预测了。
预测也有一个区间范围。
4.逐步回归分析
我们希望我们的x1 x2 x3都和我们的y有一个关联。
给了你们一组指标之后,让你们 找找他们之间的联系,我们经常做的是把这一组参数直接建立联系,但情况是y 不一定和x1和x2都有关系,你没有对他们进行做分析找出他们之间是否有关系就建立方程,这是错误的。
最好的是我们选和我们的Y都能够产生关系的因子。
来一个我做一次,每一次都要对当前的自变量做检测。
x = [143 145 147 149 150 153 154 155 156 157 158 159 160 162 164]';
X = [ones(16,1) x];
Y = [88 85 88 91 92 93 95 95 96 98 97 96 98 99 100 102]';
[b,bint,r,rint,stats] = regress(Y,X)
//结果
b =
-15.6330 //β0
0.7173 //β1
bint =
-33.1933 1.9272 //β0置信区间
0.6031 0.8315 //β1置信区间
r =
1.0588
-3.3758
-1.0931
1.1896
0.7550
1.0377
0.8858
0.1685
0.4512
1.7339
0.0166
-1.7007
-0.4180
-0.1353
-0.5699
-0.0045
rint =
-1.4183 3.5360
-5.1067 -1.6448
-3.7180 1.5318
-1.4588 3.8380
-2.0087 3.5187
-1.7143 3.7898
-1.9178 3.6895
-2.6838 3.0208
-2.3856 3.2880
-0.9096 4.3774
-2.8092 2.8424
-4.3154 0.9140
-3.1880 2.3520
-2.8852 2.6146
-3.2216 2.0818
-2.5762 2.5672
stats =
0.928//r^2 181.4408 //F值远远超过下表4.60,肯定是显著的 0.0000 1.7291
接着输入,可以看出第二个的结果不是很好
rcoplot(r,rint)//残差图
t = 1/30:1/30:14/30;
s = [11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 113.77 129.54 146.48];
[p,S] = polyfit(t,s,2)
p =
489.2946 //二次项的系数 65.8896 //一次项的系数 9.1329 //常数项
也可以将多项式回归转化为多元线性回归,我们可以让t^2和t同时作为一个元
n是指数据有多少维,m是指有多少个变量
model中的liner很明显是多元线性模型
quadratic完全二次是最常用的,基本都包括了
这里的α缺省就是0.05
x1 = [1000 600 1200 500 300 400 1300 1100 1300 300];
x2 = [5 7 6 6 8 7 5 4 3 9];
y = [100 75 80 70 50 65 90 100 110 60]';
x = [x1' x2'];
rstool(x,y,'purequadratic') //这里选择纯二次的
此时从下图可以看出预测平均收入为1000、价格为6时的商品需求量为88.4791
也可以把这些β0、β1、β2、β3...全部输出出来
此时只需要输入β
>> beta,rmse
beta =
110.5313 //β0
0.1464 //β1
-26.5709 //β2
-0.0001 //β3
1.8475 //β4
rmse =
4.5362 //总体误差,一般小于10就行
也可以吧x21直接看做x3也可以x31看做x4可以
Question1:为什么要有初值?
因为这是一个迭代的过程