请选择 进入手机版 | 继续访问电脑版
楼主: 070701111
15988 4

[程序分享] 请问用MATLAB做一元非线性回归拟合,怎么做显著性检验呢? [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

初中生

0%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
64 点
帖子
10
精华
0
在线时间
8 小时
注册时间
2012-5-18
最后登录
2013-5-28

070701111 发表于 2013-5-13 21:40:32 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请问用MATLAB做一元非线性回归拟合,怎么做显著性检验呢?注意,这里是非线性拟合,不是线性的。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB matla atlab 非线性回归 线性回归 检验

matlab-007 发表于 2015-1-31 22:07:49 |显示全部楼层 |坛友微信交流群
例子;
x=[143 145 146 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 93 95 96 98 97 96 98 99 100 102]'; [b,bint,r,rint,stats]=regress(Y,X) 得结果:b = bint = -16.0730 -33.7071 1.5612 0.7194 0.6047 0.8340 stats = 0.9282 180.9531 0.0000 即对应于b的置信区间分别为[-33.7017,1.5612]、[0.6047,0.834]; r2=0.9282, F=180.9531, p=0.0000 p<0.05, 可知回归模型 y=-16.073+0.7194x 成立. 这个是一元的,如果是多元就增加X的行数!


function [beta_hat,Y_hat,stats]=regress(X,Y,alpha)
% 多元线性回归(Y=Xβ+ε)MATLAB代码
%
% 参数说明
% X:自变量矩阵,列为自变量,行为观测值
% Y:应变量矩阵,同X
% alpha:置信度,[0 1]之间的任意数据
% beta_hat:回归系数
% Y_beata:回归目标值,使用Y-Y_hat来观测回归效果
% stats:结构体,具有如下字段
%      stats.fTest=[fV,fH],F检验相关参数,检验线性回归方程是否显著
%                   fV:F分布值,越大越好,线性回归方程越显著
%                   fH:0或1,0不显著;1显著(好)
%      stats.tTest=[tH,tV,tW],T检验相关参数和区间估计,检验回归系数β是否与Y有显著线性关系
%                   tV:T分布值,beta_hat(i)绝对值越大,表示Xi对Y显著的线性作用
%                   tH:0或1,0不显著;1显著
%                   tW:区间估计拒绝域,如果beta(i)在对应拒绝区间内,那么否认Xi对Y显著的线性作用
%      stats.TUQR=[T,U,Q,R],回归中使用的重要参数
%                  T:总离差平方和,且满足T=Q+U
%                  U:回归离差平方和
%                  Q:残差平方和
%                  R∈[0 1]:复相关系数,表征回归离差占总离差的百分比,越大越好
% 举例说明
% 比如要拟合 y=a+b*log(x1)+c*exp(x2)+d*x1*x2,注意一定要将原来方程线化
% x1=rand(10,1)*10;
% x2=rand(10,1)*10;
% Y=5+8*log(x1)+5.623*exp(x2)+1.2*x1.*x2+rand(10,1); % 以上随即生成一组测试数据
% X=[ones(10,1) log(x1) exp(x2) x1.*x2]; % 将原来的方表达式化成Y=Xβ,注意最前面的1不要丢了
% [beta_hat,Y_hat,stats]=mulregress(X,Y,0.99)
%
% 注意事项
% 有可能会出现这样的情况,总的线性回归方程式显著的(stats.fH=1),
% 但是所有的回归系数却对Y的线性作用却不显著(stats.tF=0),产生这种现象的原意是
% 回归变量之间具有较强的线性相关,但这种线性相关不能采用刚才使用的模型描述,
% 所以需要重新选择模型
%
C=inv(X'*X);
Y_mean=mean(Y);
% 最小二乘回归分析
beta_hat=C*X'*Y; % 回归系数β
Y_hat=X*beta_hat; % 回归预测
% 离差和参数计算
Q=(Y-Y_hat)'*(Y-Y_hat); % 残差平方和
U=(Y_hat-Y_mean)'*(Y_hat-Y_mean); % 回归离差平方和
T=(Y-Y_mean)'*(Y-Y_mean); % 总离差平方和,且满足T=Q+U
R=sqrt(U/T); % 复相关系数,表征回归离差占总离差的百分比,越大越好
[n,p]=size(X); % p变量个数,n样本个数
% 回归显著性检验
fV=(U/(p-1))/(Q/(n-p)); % 服从F分布,F的值越大越好
fH=fV>finv(alpha,p-1,n-p); % H=1,线性回归方程显著(好);H=0,回归不显著
% 回归系数的显著性检验
chi2=sqrt(diag(C)*Q/(n-p)); % 服从χ2(n-p)分布
tV=beta_hat./chi2; % 服从T分布,绝对值越大线性关系显著
tInv=tinv(0.5+alpha/2,n-p);
tH=abs(tV)>tInv; % H(i)=1,表示Xi对Y显著的线性作用;H(i)=0,Xi对Y的线性作用不明显
% 回归系数区间估计
tW=[-chi2,chi2]*tInv; % 接受H0,也就是说如果在beta_hat(i)对应区间中,那么Xi与Y线性作用不明显
stats=struct('fTest',[fH,fV],'tTest',[tH,tV,tW],'TUQR',[T,U,Q,R]);

使用道具

楼主有解决这个问题吗?最近也遇到了这种情况,一个不能线性化的非线性模型,已经用MATLAB求出了参数,现在想要去参数进行显著性检验,该要怎么做呢?求高手指点~~做毕设要用~~

使用道具

suncherry66 发表于 2016-10-10 19:04:13 |显示全部楼层 |坛友微信交流群
梅桥四三郎 发表于 2016-4-23 00:25
楼主有解决这个问题吗?最近也遇到了这种情况,一个不能线性化的非线性模型,已经用MATLAB求出了参数,现在 ...
你好,我现在也遇到了这个问题。请问你解决了吗?能不能教一下我呀。非常感谢!

使用道具

请问这个问题解决了吗? 我最近也遇到了

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 04:35