回歸分析算法基本原理及編程
回歸和相關性分析的區別?
相關性分析只是判定變量和變量之間有無關聯
回歸分析構建關系和關系之間具體的關系式子,用一個函數或者方程來擬合這個關系式子

采用任何模型都要有原因
回歸方程 是不是和所有的X都產生關系呢?
逐步回歸方法是一種挑選哪些因素和因變量產生關系。
要突出模型的缺點。
一 、一元線性回歸
1.數學模型

一元方程就可以構建出來,哪一條線才是我們回歸擬合度最高的呢?

一元線性方程中只有兩個未知參數a、b
Question1:只需要兩組參數,方程就可以求出。但表格中已經給了16組,這樣會導致求a和b浪費,肯定會存在多余解,我們希望哪一個解是最好的?
我們擬合的方程應該和我們實際擬合的差越小越好。
Question:2:如何和我們的a與b聯系起來呢?
我們可以用最小二乘。


你肯定能夠找出β0和β1,但是你如何確定他是我們要找的,我們一定要對它做假設檢驗。
可以做預測和控制。回歸有兩種主要用途?做預測和控制。
1.最小二乘法

如果我們的模型估計量β0和β1已經知道了,我們可以拿出來算算預測值y和我們真實值的差大不大,如果差值很小,那么就是正確的。

我們可以計算出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:為什么要有初值?
因為這是一個迭代的過程
