Matlab之線性迴歸作業
今天做了數學建模的作業,順便發了。
記錄一下我的好心情。
-----------------------------------------------------------------------------------
作業如下:
8.在腐蝕刻線試驗中,已知腐蝕深度y與腐蝕時間x有關,現收集到資料如表4.33所示。
表4.33 腐蝕深度與腐蝕時間
x/s 5 10 15 20 30 40 50 60 70 90 110
y/um 6 10 10 13 16 17 19 23 25 29 36
(1)求經驗迴歸方程^y=^a+^bx;
(2)檢驗一元線性迴歸方程的顯著性(a=0.05);
(3)當腐蝕時間為x0=25s時,求腐蝕深度的預測值。
解:(1)
~x=(5+10+15+20+30+40+50+60+70+90+110)/11=500/11;
~y=(6+10+10+13+16+17+19+23+25+29+36)/11=204/11;
Sxy=5*6+10*10+15*10+20*13+30*16+40*17+50*19+60*23+70*25+90*29+110*36=12350;
Sxx=5*5+10*10+15*15+20*20+30*30+40*40+50*50+60*60+70*70+90*90+110*110=34450;
^b=(Sxy-n*~x*~y)/(Sxx-n*~x*~x)=0.2625
^a=~y-^b*~x=6.6236;
經驗迴歸方程為:^y=6.6236+0.2625*x;
(2)假設:H0:b=0(即不存線上性關係)
編寫MATLAB指令對其做迴歸分析如下:
x=[5 10 15 20 30 40 50 60 70 90 110];
X=[1 5;1 10;1 15;1 20;1 30;1 40;1 50;1 60;1 70;1 90;1 110];
y=[6 10 10 13 16 17 19 23 25 29 36];
plot(x,y,'r.'),grid on
[b,bint,r,rint,states]=regress(y',X)
Rcoplot(r,rint)
執行得時序殘差圖如下所示
由上可知,第一個點落在以y=0為中軸線的帶狀區域之外,即點(5,6)是奇異點,應該刪除。
再次編寫MATLAB指令對其做迴歸分析如下:
x=[ 10 15 20 30 40 50 60 70 90 110];
X=[1 10;1 15;1 20;1 30;1 40;1 50;1 60;1 70;1 90;1 110];
y=[ 10 10 13 16 17 19 23 25 29 36];
plot(x,y,'r.'),grid on
[b,bint,r,rint,states]=regress(y',X)
rcoplot(r,rint)
執行的迴歸係數為:^a=7.2336,^b=0.2539.於是得一元線性迴歸方程為:^y=7.2336+0.2539*x;
其置信度為95%的置信區間分別為:[ 6.0467 , 8.4204]和[0.2336 , 0.2741].
時序殘差圖如下所示:
R^2= 0.9905,F=837.6023,p=0.0000.由於R^2=0.9905,接近於1,所以迴歸直線同樣本觀測值得擬合程度很好,F值為837.6023,遠大於其臨界值F0.05(1,9)=665.2648,p的值為0遠小於顯著性水平0.05,這說明隨機變數Y與解釋變數x之間有顯著的線性關係。根據時序殘差圖可以判斷,殘差之落在以y=0為中軸線的帶狀區域內,所以無奇異點,所以迴歸模型滿足假設條件。
(3)由(2)可知,^y=7.2336+0.2539*x,將x0=25s代入得,y=13.5811,即腐蝕預測值為13.5811um。
9.鍊鋼過程中用來盛鋼水的鋼包,由於受鋼水的浸溼作用,容積會不斷擴大,表4.34給出了使用次數x與容積增大量y的15對實驗資料。
表4.34
x 2 3 4 5 6 7 8 9 10 11
y 6.42 8.20 9.58 9.50 9.70 10.00 9.93 9.99 10.49 10.59
x 12 13 14 15 16
y 10.60 10.80 10.60 10.90 10.76
根據經驗,y與x之間有如下形式的非線性模型y=ae^(b/x),試找出x與y的關係式。
解:編寫MATLAB指令對其做迴歸分析如下:
x=[2: 16];
Y=[6.42 8.20 9.58 9.50 9.70 10.00 9.93 9.99 10.49 10.59 10.60 10.80 10.60 10.90 10.76];
myfunc=inline('beta(1)*exp(beta(2)./x)','beta','x');
beta=nlinfit(x,Y,myfunc,[1 1]);
a=beta(1),b=beta(2)
y= beta(1)*exp(beta(2)./x);
plot(x,Y,'r+',x,y,'b'),grid on
執行得迴歸係數為:a=11.6037,b=-1.0641.所以迴歸方程如下:y=11.6037*e^(-1.0641/x).
模擬圖如下:
PS:我是一條擁有超過7秒記憶的鹹魚。