Matlab中polyfit和regress


1.表中是道瓊斯工業指數(DJIA)和標准普爾500種股票指數(S&P500)1988年至1997年對應股票的收益率資料:

    年份

DJIA收益率(%)

S&P500收益率(%)

年份

DJIA收益率(%)

S&P500收益率(%)

1988

16.0

16.6

1993

16.8

10.1

1989

31.7

31.5

1994

4.9

1.3

1990

-0.4

-3.2

1995

36.4

37.6

1991

23.9

30.0

1996

28.6

23.0

1992

7.4

7.6

1997

24.9

33.4

計算兩種指數收益率的相關系數,分析其相關程度,以0.05的顯著性水平檢驗相關系數的顯著性。

 1 x  = [16.0 31.7 -0.4 23.9 7.4 16.8 4.9 36.4 28.6 24.9];
 2 y = [16.6 31.5 -3.2 30.0 7.6 10.1 1.3 37.6 23.0 33.4];
 3 scatter(x,y,'r*');
 4 xlabel('DJIA收益率(%)');
 5 ylabel('S&P500收益率(%)');
 6  p = polyfit(x,y,1);%1表示一次函數
 7  hold on;
 8  xx = -5:1:40;
 9 yy = polyval(p,xx);
10 plot(xx,yy,'b-');%畫出來的是光滑的曲線
11  grid;
12 title('回歸分析表')
13 hold off;
14 [r,p,rlo,rup] = corrcorf(x,y)%相關分析
15  
16 >> [r,p,rlo,rup] = corrcoef(x,y)
17 
18 r =
19 
20     1.0000    0.9481
21     0.9481    1.0000
22 
23 
24 p =
25 
26     1.0000    0.0000
27     0.0000    1.0000
28 
29 
30 rlo =
31 
32     1.0000    0.7903
33     0.7903    1.0000
34 
35 
36 rup =
37 
38     1.0000    0.9880
39     0.9880    1.0000
40 
41 >> [i,j] = find(p<0.05);
42 >> [i,j] = find(p<0.05)
43 
44 i =
45 
46      2
47      1
48 
49 
50 j =
51 
52      1
53      2
54 
55  %r(i,j)表示相關系數
56  %P表示假設檢驗的P-value值,P-value值越小表示的相關性越顯著。
57  %一般以P < 0.05 為顯著, P<0.01 為非常顯著

 附錄:r(1,2) = r(2,1) = 0.9481便是相關系數,t = r*sqrt(n-2)/sqrt(1-r^2) = 8.4335,tα/2 = 2.31,則結果是顯著的。

rlo和rup是r在%95可信度下的置信區間。

2.regress解決上題

 

 1 x  = [16.0 31.7 -0.4 23.9 7.4 16.8 4.9 36.4 28.6 24.9];
 2 y = [16.6 31.5 -3.2 30.0 7.6 10.1 1.3 37.6 23.0 33.4];
 3 
 4 scatter(x,y,'r*');
 5 xlabel('DJIA收益率(%)');
 6 ylabel('S&P500收益率(%)');
 7  Y = y';
 8  X = [ones(length(y),1),x'];
 9 [b,bint,r,rint,stats]=regress(Y,X)
10 %下面是返回值
11 b =
12 
13    -2.5086
14     1.1198
15 
16 
17 bint =
18 
19    -9.3225    4.3052
20     0.8137    1.4259
21 
22 
23 r =
24 
25     1.1918
26    -1.4891
27    -0.2435
28     5.7454
29     1.8221
30    -6.2040
31    -1.6784
32    -0.6522
33    -6.5177
34     8.0256
35 
36 
37 rint =
38 
39   -10.0742   12.4578
40   -11.9810    9.0029
41    -9.6540    9.1671
42    -4.3221   15.8128
43    -8.7610   12.4052
44   -16.1645    3.7565
45   -11.9494    8.5926
46   -10.4663    9.1620
47   -15.8388    2.8034
48    -0.7121   16.7633
49 
50 
51 stats =
52 
53     0.8990   71.1816    0.0000   23.5811
54 %ployval函數中第一個多項式系數(行向量)是按高到低,而regress中的b是從低到高,而且是個列向量,不可直
55 
56 %接bb = b',若是這樣還需逆置(fliplr(bb)),或者直接順時針旋轉90
57 %B=rot90(A):矩陣B是矩陣A沿逆時針方向旋轉90。得到的
58 %B=rot90(A,k):矩陣B是矩陣A沿逆時針方向旋轉k*90。得到的(要想順時針旋轉,k取-1)
59 
60 xx = -5:5:40;
61 yy = polyval(rot90(b,-1));
62 hold on;
63 plot(xx,yy,'r')
64 grid

 

進行線性回歸時,有4個基本假定:

  ① 因變量與自變量之間存在線性關系;

  ② 殘差是獨立的;

  ③ 殘差滿足方差奇性;

  ④ 殘差滿足正態分布。

  在Matlab軟件包中有一個做一般多元回歸分析的命令regeress,調用格式如下: [b, bint, r, rint, stats] = regress(y,X,alpha)  或者 [b, bint, r, rint, stats] = regress(y,X)  此時,默認alpha = 0.05.

這里,y是一個 的列向量,X是一個 的矩陣,其中第一列是全1向量(這一點對於回歸來說很重要,這一個全1列向量對應回歸方程的常數項),一般情況下,需要人工造一個全1列向量。

  回歸方程具有如下形式:   其中, 是殘差。 在返回項[b,bint,r,rint,stats]中,

  ① 是回歸方程的系數; ② 是一個 矩陣,它的第 行表示 的(1-alpha)置信區間; ③ 是 的殘差列向量; ④ 是 矩陣,它的第 行表示第 個殘差 的(1-alpha)置信區間;

注釋:殘差與殘差區間杠桿圖,最好在0點線附近比較均勻的分布,而不呈現一定的規律性,如果是這樣,就說明回歸分析做得比較理想。 ⑤ 一般的, 返回4個值: 值、F_檢驗值、閾值 ,與顯著性概率相關的 值(如果這個 值不存在,則,只輸出前3項)。

注釋: (1)一般說來, 值越大越好。 (2)人們一般用以下統計量對回歸方程做顯著性檢驗:F_檢驗、t_檢驗、以及相關系數檢驗法。Matlab軟件包輸出F_檢驗值和閾值 。一般說來,F_檢驗值越大越好,特別的,應該有F_檢驗值 。 (3)與顯著性概率相關的 值應該滿足 。如果 ,則說明回歸方程中有多余的自變量,可以將這些多余的自變量從回歸方程中剔除(見下面逐步回歸的內容)。 這幾個技術指標說明擬合程度的好壞。這幾個指標都好,就說明回歸方程是有意義的。

3.解同余方程組

1 >> syms n
2 >> solve(mod(n,10) - 9,mod(n,9) - 8,mod(n,8) - 7)
3 Warning: 3 equations in 1 variables.  
4 Warning: Explicit solution could not be found. 
5 > In solve at 81
6  
7 ans =
8  
9 [ empty sym ]

注意:matlab里求余不是%也不是mod,而是rem(x,y)
上面的我估計方法不對,懂得指點下!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM