Matlab中polyfit和regress

2023-10-31 19:30
文章标签 matlab polyfit regress

本文主要是介绍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)
上面的我估计方法不对,懂得指点下!

这篇关于Matlab中polyfit和regress的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/317605

相关文章

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

libsvm在matlab中的使用方法

原文地址:libsvm在matlab中的使用方法 作者: lwenqu_8lbsk 前段时间,gyp326曾在论坛里问libsvm如何在matlab中使用,我还奇怪,认为libsvm是C的程序,应该不能。没想到今天又有人问道,难道matlab真的能运行libsvm。我到官方网站看了下,原来,真的提供了matlab的使用接口。 接口下载在: http://www.csie.ntu.edu.

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数_matlab pmsm-CSDN博客

MATLAB层次聚类分析法

转自:http://blog.163.com/lxg_1123@126/blog/static/74841406201022774051963/ 层次聚类是基于距离的聚类方法,MATLAB中通过pdist、linkage、dendrogram、cluster等函数来完成。层次聚类的过程可以分这么几步: (1) 确定对象(实际上就是数据集中的每个数据点)之间的相似性,实际上就是定义一个表征

MATLAB的fix(),floor()和ceil()函数的区别与联系

fix(x),floor(x)和ceil(x)函数都是对x取整,只不过取整方向不同而已。 这里的方向是以x轴作为横坐标来看的,向右就是朝着正轴方向,向左就是朝着负轴方向。 fix(x):向0取整(也可以理解为向中间取整) floor(x):向左取整 ceil(x):向右取整 举例: 4个数:a=3.3、b=3.7、c=-3.3、d=-3.7 fix(a)=3 fl

MATLAB中的eig函数

在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有5种: E=eig(A):求矩阵A的全部特征值,构成向量E。 [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。 [V,D]=eig(A,'nobalance'):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特

MATLAB中的diag函数

diag函数功能:矩阵对角元素的提取和创建对角阵 设以下X为方阵,v为向量 1、X = diag(v,k)当v是一个含有n个元素的向量时,返回一个n+abs(k)阶方阵X,向量v在矩阵X中的第k个对角线上,k=0表示主对角线,k>0表示在主对角线上方,k<0表示在主对角线下方。例1: v=[1 2 3]; diag(v, 3) ans =      0     0     0

Matlab simulink建模与仿真 第十章(模型扩展功能库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、模型扩展功能库中的模块概览         注:下面不会对Block Support Table模块进行介绍。 二、基于触发的和基于时间的线性化模块 1、Trigger-Based Linearization基于触发的线性化模块 (1)每次当模块受到触发时,都会调用linmod或者dlinmod函数