多元线性回归拟合数据到三次多项式方程与相互作用项

32次观看(过去30天)
你好,
我有两个自变量和一个因变量的数据(从实验中获得)。我需要使用线性回归将这些数据拟合到一个10系数的三次多项式方程-对于你们中的工程师来说,这是指定制冷压缩机性能的标准方程。在EES中,通过在表格中输入数据并从表格菜单中选择“线性回归”选项,可以很容易地做到这一点。如何在Matlab中实现呢?我的方程形式为X = C1 + C2.(S) + C3.(D) + C4·(S2) + C5·(S·D) + C6·(D2) + C7·(S3) + C8·(D·S2) +C9·(S·D2) + C10·(D3)其中X为因变量,S和D为自变量。S和D旁边的数字表示它们的幂。C1到C10是需要计算的系数。
使用“回归”函数给我一个0的常数,并警告我我的设计矩阵是秩亏的。使用曲线拟合工具箱(cftool -多项式选项)为我提供了荒谬的系数值(p00 = -6.436e15)。当我试图在cftool中输入一个自定义方程时,它会切换到非线性回归,并要求我输入系数的猜测值,这是我不想做的。我可以使用哪些其他函数来执行这个回归,以及如何实现它们。任何建议/帮助/建议都将不胜感激。
非常感谢。
Gautam。
2的评论
Gautam
Gautam 2014年4月1日
>> x = [-10 101;-10 114;-10 129;-10 144;5 96;5 106;5 119;5 133;5 92;5 97; 5 108; 5 122];
>> y = [72.03;67.90;62.77;57.55;88.53;84.70;79.91;73.73;123.43;120.91; 115.44; 107.83];
>> x1 = X(:,1);
>> x2 = X(:,2);
> > cftool
我用了一个自定义方程,Y = f(x1, x2)自定义方程是:
a + b * x1 + c * x2 + d * (x1 ^ 2) + e * (x1 * x2) + f * (x2 ^ 2) + g * (x1 ^ 3) + h * (x1 ^ 2 * x2) + i * (x1 * x2 ^ 2) + j * (x2 ^ 3)
在结果框中出现的是这样的:
用模型函数计算的复值,不能继续拟合。尝试使用或收紧系数的上下界。
任何帮助吗?

登录评论。

接受的答案

汤姆巷
汤姆巷 2014年4月2日
在X矩阵的第一列中只有三个不同的值,因此无法估计该列的常数、线性、二次和三次效应。以下是如何使用三次模型中除了x1^3之外的所有项:
fitlm(X,Y,[0 0;1 0;0 1;1 1;2 0;0 2;0 3;1 2;2 1])
或者,如果你知道三阶项是合适的,你将需要在x1的另一个值处收集一些数据。
3评论
Gautam
Gautam 2014年4月2日
非常感谢斯塔福德先生为我解释清楚。我是Matlab的新手,不能完全理解警告背后的含义。我用一个更大的数据集尝试了fitlm,它确实给了我与EES完全相同的值,与公布的系数有大约2%的变化。我对你感激不尽。

登录评论。

更多答案(1)

沙Prasanna
沙Prasanna 2014年4月1日
有很多方法可以做到这一点。其中最简单的是使用曲线拟合工具,并选择正确的选项。试试这个链接寻求帮助:
使用统计工具箱,你可以通过指定polyijf模型规范来做到这一点:
另一种方法是用MATLAB求解线性系统。假设X S D是MATLAB工作空间中的向量。创建随机数据并计算C中的系数:
S = randn(100,1);
D = randn(100,1),
X = randn(100,1);
M =[(长度(S), 1),的年代,D S ^ 2, S * D, D . ^ 2, S . ^ 3 D *。^ 2, s * D。^ 2, d . ^ 3)
C = m \ x
2的评论
Gautam
Gautam 2014年4月2日
下面是我的一些尝试:
X = [-10 101;-10 114;-10 129;-10 144;5 96;5 106;5 119;5 133;5 92;5 97; 5 108; 5 122];
>> y = [72.03;67.90;62.77;57.55;88.53;84.70;79.91;73.73;123.43;120.91; 115.44; 107.83];
>> x1 = X(:,1);
>> x2 = X(:,2);
>> mdl = fitlm(X,Y,'poly33')
警告:回归设计矩阵在机器精度范围内排名不足。>在TermsRegression>TermsRegression。在LinearModel.LinearModel>LinearModel中checkDesignRank为98。合身868英镑,合身117英镑
mdl =
线性回归模型:y ~ 1 + x1^2 + x1*x2 + x2^2 + x1^3 + (x1^2):x2 + x1:(x2^2) + x2^3
估计系数:估计SE tStat pValue _________ ________ _________ ______
(拦截)0 0 NaN NaN
x1-10.1435.3752-1.8870.19979
x2-0.31251.1432-0.273350.81022
X1 ^2 5.5413 1.6852 3.2882 0.081361
X1:x2 0.0043522 0.026071 0.16694 0.88277
X2 ^2 2.6105e-05 0.010348 0.0025228 0.99822
X1 ^3 0.55158 0.16763 3.2905 0.08126
X1 ^2:x2 -5.4944e-05 0.00021022 -0.26136 0.81827
X1:x2^2 -8.3639e-05 0.00012017 -0.69599 0.55844
X2 ^3 -4.12e-06 3.109e-05 -0.13252 0.9067
观察数:12,误差自由度:3,均方根误差:0.165 r平方:1,调整r平方1 f统计量与常数模型:2.76e+04, p值= 3.3e-07
尝试2:
A = [1 -10 101 100 -1010 10201 -1000 10100 -102010 1030301 .
1 -5 96 25 -480 9216 -125 2400 -46080 884736
1 5 92 25 460 8464 125 2300 42320 778688
1 -10 114 100 -1140 12996 -1000 11400 -129960 1481544
1 -5 106 25 -530 11236 -125 2650 -56180 1191016
1 5 97 25 485 9409 125 2425 47045 912673
1 -10 129 100 -1290 16641 -1000 12900 -166410 2146689
1 -5 119 25 -595 14161 -125 2975 -70805 1685159
1 5 108 25 540 11664 125 2700 58320 1259712
1 -10 144 100 -1440 20736 -1000 14400 -207360 2985984
1 -5 133 25 -665 17689 -125 3325 -88445 2352637
15 122 25 610 14884 125 3050 74420 1815848
];
b = A\Y警告:Rank不足,Rank = 9, tol = 4.463946e-09。
b =
0
-62.6154
18.9421
-35.6208
2.9627
-0.0958
-3.8184
-0.0236
-0.0136
0.0001
尝试3:
sf = fit([x1 x2],Y,“poly33”“稳健”“双性恋”
警告:方程式条件不佳。删除重复的数据点或尝试居中和缩放。>警告>警告。扔在30.在fit>iLinearFit在690在我穿396在适合度为108 Warning: Iteration limit reached for robust fitting. > In Warning>Warning.throw at 30 In fit>iRobustLinearFit at 796 In fit>iFit at 404 In fit at 108
线性模型Poly33:
Sf (x,y) = p00 + p10*x + p01*y + p20*x²+ p11*x*y + p02*y²+ p30*x³+
P21 *x²*y + p12*x*y²+ p03*y^3
系数(95%置信区间):
P00 = -2.736e+14 (-6.205e+17, 6.199e+17)
P10 = -2.736e+13 (-6.205e+ 16,6.199 e+16)
P01 = 0.3112 (-346.1, 346.7)
P20 = 1.094e+13 (-2.48e+16, 2.482e+16)
P11 = -0.009459 (-5.569, 5.551)
P02 = -0.005727 (-3.308, 3.296)
P30 = 1.094e+12 (-2.48e+15, 2.482e+15)
P21 = -0.0001193 (-0.4058, 0.4055)
P12 = -1.846e-05 (-0.02545, 0.02542)
P03 = 1.358e-05 (-0.01007, 0.01009)
尝试4:
sf = fit([x1 x2],Y,“poly33”“稳健”“双性恋”“正常化”“上”
警告:方程式为严重的条件。删除重复的数据点或尝试居中和缩放。
>警告>警告。扔在30.
fit>iLinearFit在690
我穿396
适合度为108
警告:迭代限制达到坚固的配件。
>警告>警告。扔在30.
fit>iRobustLinearFit在796
它在404
适合度为108
线性模型Poly33:
Sf (x,y) = p00 + p10*x + p01*y + p20*x²+ p11*x*y + p02*y²+ p30*x³+
P21 *x²*y + p12*x*y²+ p03*y^3
在哪里X归一化的平均值为-3.333,标准差为6.513
而且y归一化的平均值为113.4,标准标准为16.34
系数(95%置信区间):
P00 = 2.802e+14 (-4.173e+15, 4.734e+15)
P10 = 1.15e+15 (-1.712e+16, 1.942e+16)
P01 = -6.475 (-15.32, 2.371)
P20 = 1.005 (-3.659, 5.67)
P11 = -1.507 (-6.289, 3.275)
P02 = -0.3495 (-5.084, 4.385)
P30 = -8.362e+14 (-1.413e+16, 1.245e+16)
P21 = -0.2157 (-8.185, 7.754)
P12 = -0.6978 (-12.13, 10.73)
P03 = -0.3148 (-7.039, 6.409)
有没有什么我还没有尝试过的或者我犯过的错误?任何事情都有帮助。谢谢你!

登录评论。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!