Matlab篇----常用的回归分析Matlab命令(regress篇)

本文介绍了一种使用Matlab进行回归分析的方法,并通过一个具体的例子展示了如何应用regress命令来进行一元及多元线性回归分析,包括数据导入、模型建立、结果解释及可视化等过程。

前言


    最近学了不少回归分析的知识,用到了几个常用的Matlab命令,写在这里做个总结。

    回归分析,就是研究几种变量之间的关系。如果你也很喜欢分析数据,这种技巧是基本的一项。(PS:高级的是机器学习。)


1 regress命令


    用于一元及多元线性回归,本质上是最小二乘法。在Matlab 2014a中,输入help regress ,会弹出和regress的相关信息,一一整理。

    调用格式:

  • B = regress(Y,X)
  • [B,BINT] = regress(Y,X)
  • [B,BINT,R] = regress(Y,X)
  • [B,BINT,R,RINT] = regress(Y,X)
  • B,BINT,R,RINT,STATS] = regress(Y,X)
  • [...] = regress(Y,X,ALPHA)


    参数解释:

  • B:回归系数,是个向量(“the vector B of regression coefficients in the  linear model Y = X*B”)。
  • BINT:回归系数的区间估计(“a matrix BINT of 95% confidence intervals for B”)。
  • R:残差( “a vector R of residuals”)。
  • RINT:置信区间(“a matrix RINT of intervals that can be used to diagnose outliers”)。
  • STATS:用于检验回归模型的统计量。有4个数值:判定系数R^2,F统计量观测值,检验的p的值,误差方差的估计。
  • ALPHA:显著性水平(缺少时为默认值0.05)。


2 regress函数例程


    目标函数:y=Ax1^2+Bx1^2+Cx1+Dx2+Ex1*x2+F  (这是一个二次函数,两个变量,大写的字母是常数)


%导入数据
y=[7613.51  7850.91  8381.86  9142.81 10813.6 8631.43 8124.94 9429.79 10230.81 
... 10163.61 9737.56 8561.06 7781.82 7110.97]';
x1=[7666 7704 8148 8571 8679 7704 6471 5870 5289 3815 3335 2927 2758 2591]';
x2=[16.22 16.85 17.93 17.28 17.23 17 19 18.22 16.3 13.37 11.62 10.36 9.83 9.25]';
X=[ones(size(y)) x1.^2 x2.^2 x1 x2 x1.*x2];

%开始分析
[b,bint,r,rint,stats] = regress(y,X);


    结果截图:

    b为对应的参数 b(1)为F(最后那个常数项) ,b(2)为A(第一个参数),b(3)为B,b(4)为C,b(4)为D,b(5)为E。bint为b的95%置信区间。

    比较重要的stats分析

    stats的第三个参数为F检测的P值,p值很小(P<0.001),说明拟合模型有效。(这里的分析技巧,以后有时间的话,会专门总结。)

 

(注:*号是乘法的意思,*前面的数是矩阵的系数。)

    下面数据可视化看下。


%以下绘图查看拟合效果
<pre name="code" class="cpp">
scatter3(x1,x2,y,'filled') %scatter可用于画散点图




    截图:

    后续的分析如下:

%拟合,三维视图显示
hold on  %在刚刚那副散点图上接着画
x1fit = min(x1):100:max(x1);   %设置x1的数据间隔
x2fit = min(x2):1:max(x2);     %设置x2的数据间隔
[X1FIT,X2FIT] = meshgrid(x1fit,x2fit);    %生成一个二维网格平面,也可以说生成X1FIT,X2FIT的坐标
YFIT=b(1)+b(2)*X1FIT.^2+b(3)*X2FIT.^2+b(4)*X1FIT
     ... +b(5)*X2FIT+b(6)*X1FIT.*X2FIT;    %代入已经求得的参数,拟合函数式
mesh(X1FIT,X2FIT,YFIT)    %X1FIT,X2FIT是网格坐标矩阵,YFIT是网格点上的高度矩阵
view(10,10)  %改变角度观看已存在的三维图,第一个10表示方位角,第二个表示俯视角。
             %方位角相当于球坐标中的经度,俯视角相当于球坐标中的纬度
xlabel('x1') %设置X轴的名称
ylabel('x2') %设置y轴的名称
zlabel('y')  %设置z轴的名称</span>


最终结果截图:





参考文献:

http://wenku.baidu.com/link?url=HkCnQVFa7s0TR1_I7GOrH_jBitSG3Cgg8rDxhn-1ac3rsGhbCWCe2BYKVUDL6jh2n84qv_gdn2ZHBj1CoGHhLNrR84Fc8hvmnVT8aF8ybCu

### 使用 MATLAB 表示和实现门函数函数是一种典型的分段函数,在信号处理和控制系统中广泛应用。它可以在指定的时间范围内保持恒定值,而在其他时间范围内为零。以下是基于 MATLAB 的方法来表示和实现门函数。 #### 方法一:使用向量表示法绘制门函数波形 可以采用向量表示法定义时间和幅值,并通过 `plot` 函数绘制门函数的波形。这种方法适用于连续时间信号的可视化。 ```matlab % 定义参数 t_start = -1; % 时间起点 t_end = 5; % 时间终点 duration = 2; % 门函数持续时间 amplitude = 1; % 幅度 % 创建时间向量 dt = 0.01; % 时间步长 t = t_start:dt:t_end; % 构造门函数 gate_function = zeros(size(t)); % 初始化全零数组 gate_function((t >= 0) & (t <= duration)) = amplitude; % 在指定区间赋值 % 绘制门函数 figure; plot(t, gate_function, 'LineWidth', 1.5); xlabel('Time (s)'); ylabel('Amplitude'); title('Gate Function Representation'); grid on; ``` 上述代码实现了从 `-1` 到 `5` 秒之间的一个门函数,其幅度为 `1`,持续时间为 `[0, 2]` 秒[^3]。 --- #### 方法二:以符号表达式创建匿名函数 另一种方法是利用 MATLAB 的符号工具箱,将门函数定义为一个符号表达式,再转换成匿名函数以便数值计算。 ```matlab syms t real; % 定义符号变量 a = 0; % 开始时间 b = 2; % 结束时间 amplitude = 1; % 幅度 % 符号形式的门函数 symbolic_gate = piecewise(t >= a && t <= b, amplitude, 0); % 将符号表达式转化为匿名函数 gate_func = matlabFunction(symbolic_gate); % 测试匿名函数 test_time = linspace(-1, 5, 500); % 定义测试时间点 output_values = gate_func(test_time); % 计算输出值 % 绘图验证 figure; plot(test_time, output_values, 'r-', 'LineWidth', 1.5); hold on; stem(test_time, output_values, 'bo'); % 显示离散采样点 xlabel('Time (s)'); ylabel('Amplitude'); title('Anonymous Gate Function'); legend('Continuous Plot', 'Sampled Points'); grid on; ``` 这里采用了 `piecewise` 函数定义了一个条件性的门函数,并将其转为匿名函数用于后续分析或仿真[^1]。 --- #### 方法三:直接定义匿名函数 如果不需要借助符号工具箱,可以直接编写一个简洁的匿名函数来描述门函数的行为。 ```matlab % 匿名函数定义 gate_anonymous = @(t, start, end_time, amp) ... (amp .* ((t >= start) & (t <= end_time))); % 参数设置 start_time = 0; end_time = 2; amplitude_value = 1; % 时间轴 time_vector = linspace(-1, 5, 500); % 应用门函数 result = gate_anonymous(time_vector, start_time, end_time, amplitude_value); % 可视化结果 figure; plot(time_vector, result, 'g-', 'LineWidth', 1.5); xlabel('Time (s)'); ylabel('Amplitude'); title('Direct Anonymous Gate Function'); grid on; ``` 这段脚本提供了一种灵活的方式来调整门函数的关键属性(如起始/结束时刻、幅度等)[^1]。 --- ### 总结 以上介绍了三种不同的 MATLAB 技巧来实现门函数:一是基于向量表示法配合绘图命令;二是结合符号工具箱生成精确解析模型后再转化成匿名函数;三是单纯依靠匿名函数快速搭建所需功能。每种方式都有各自的优点,可根据具体需求选择合适的方法。
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值