Matlab:回归分析(1)
1.多元线性回归
1 %数据的输入 2 x = [143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]; 3 y = [88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]; 4 %转换为列向量 5 X = [ones(16,1) x']; 6 Y = y'; 7 %回归分析及检验 8 [b, bint, r, rint, states] = regress(Y, X, 0.05); 9 b, bint, states 10 %作散点图和回归之后的图 11 z = b(1) + b(2)*x'; 12 figure(1) 13 plot(x', Y, 'k+') 14 hold on 15 plot(x', z, 'r') 16 %作残差图 17 figure(2) 18 rcoplot(r, rint)
结果:
2.可线性化的一元非线性回归
根据数据散点图
配曲线,此题配的是倒指数曲线y = a*exp(b/x)其中a>0
1 function f = volum(beta, x) 2 f = beta(1) * exp(beta(2) ./ x);
1 %输入数据 2 x = 2:16; 3 y = [6.42 8.20 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.80 10.60 10.90 10.76]; 4 %拟定回归系数的初值 5 beta0 = [8 2]'; 6 %求回归系数 7 [beta, r, J] = nlinfit(x', y', 'volum', beta0); 8 beta 9 %预测及作图 10 [Y, delta] = nlpredci('volum', x', beta, r, J); 11 %散点图 12 plot(x, y, 'k+') 13 hold on 14 %拟合图 15 plot(x, Y, 'r')
结果
3.多项式回归
方法一:直接做二次多项式回归
1 t=1/30:1/30:14/30; 2 s=[11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 113.77 129.54 146.48]; 3 %二次多项式回归 4 [p, S] = polyfit(t, s, 2); 5 p
结果:
p =489.2946 65.8896 9.1329
即为二次多项式系数 cba
方法二:化为多元线性回归
1 t = 1/30:1/30:14/30; 2 s = [11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 113.77 129.54 146.48]; 3 %化为多元线性回归 4 T = [ones(14, 1), t', (t.^2)']; 5 [b, bint, r, rint, states] = regress(s', T, 0.05); 6 b, states 7 %预测及作图 8 %参数p和S必须由多项式回归函数polyfit求出 9 [p, S] = polyfit(t, s, 2); 10 Y = polyconf(p, t, S);%预测值 11 plot(t, s, 'k+', t, Y, 'r')
结果:
b =
9.1329 65.8896 489.2946
states =
1.0e+007 *
0.0000 1.0378 0.0000 0.0000
b即为二次多项式系数abc
——现在的努力是为了小时候吹过的牛B!!