zoukankan      html  css  js  c++  java
  • 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)
    上面的我估计方法不对,懂得指点下!

  • 相关阅读:
    网络爬虫基础练习
    综合练习-词频统计
    组合数据类型
    【Hadoop】Hadoop综合大作业
    理解MapReduce操作
    Hadoop-熟悉常用的HDFS操作
    python-爬取中药信息
    Pytthon-数据结构化与保存
    python-爬取校园新闻首页的新闻
    python-爬虫基础
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2812874.html
Copyright © 2011-2022 走看看