最小二乘擬合matlab,存在已知协方差情况下的最小二乘解
lscov
存在已知協(xié)方差情況下的最小二乘解
語(yǔ)法
x = lscov(A,B)
x = lscov(A,B,w)
x = lscov(A,B,V)
x = lscov(A,B,V,alg)
[x,stdx] = lscov(...)
[x,stdx,mse] = lscov(...)
[x,stdx,mse,S] = lscov(...)
說(shuō)明
x = lscov(A,B) 返回線性方程組 A*x
= B 的普通最小二乘解,即 x 是使得平方誤差 (B - A*x)'*(B -
A*x) 之和最小的 n×1 向量,其中 A 是 m×n 矩陣,B 是 m×1 矩陣。B 也可以是 m×k 矩陣,lscov 返回 B 的每列的一個(gè)解。當(dāng) rank(A)
< n 時(shí),lscov 將 x 的最大可能元素?cái)?shù)設(shè)置為零以獲取一個(gè)“基本解”。
x = lscov(A,B,w)(其中 w 是長(zhǎng)度為 m 的正實(shí)數(shù)權(quán)重向量)返回線性方程組 A*x
= B 的加權(quán)最小二乘解,即 x 使得 (B - A*x)'*diag(w)*(B -
A*x) 最小。w 通常包含計(jì)數(shù)或逆方差。
x = lscov(A,B,V)(其中 V 是 m×m 實(shí)對(duì)稱正定矩陣)返回協(xié)方差矩陣與 V 成比例的線性方程組 A*x = B 的廣義最小二乘解,即 x 使得 (B - A*x)'*inv(V)*(B -
A*x) 最小。
更為常見的情況是,V 可以是半正定矩陣,lscov 返回在 A*x
+ T*e = B 約束下,使得 e'*e 最小的 x,最小值計(jì)算基于 x、e 和 T*T' = V。當(dāng) V 為半正定矩陣時(shí),僅當(dāng) B 與 A 和 V 一致(即 B 位于 [A T] 列空間內(nèi)),此問題才有一個(gè)解,否則 lscov 將返回錯(cuò)誤。
默認(rèn)情況下,lscov 計(jì)算 V 的 Cholesky 分解,實(shí)際上是反轉(zhuǎn)該因子以將該問題轉(zhuǎn)變?yōu)槠胀ㄗ钚《朔ā5?#xff0c;如果 lscov 確定 V 為半正定矩陣,它將使用正交分解算法以避免對(duì) V 求逆。
x = lscov(A,B,V,alg) 指定當(dāng) V 為矩陣時(shí)用于計(jì)算 x 的算法。alg 可以具有以下值:
'chol' 使用 V 的 Cholesky 分解。
'orth' 使用正交分解,它在 V 是病態(tài)或?yàn)槠娈惥仃嚂r(shí)更合適,但計(jì)算的開銷更高。
[x,stdx] = lscov(...) 返回 x 的估計(jì)標(biāo)準(zhǔn)誤差。當(dāng) A 秩虧時(shí),與 x 的必要零元素對(duì)應(yīng)的 stdx 元素中會(huì)包含零。
[x,stdx,mse] = lscov(...) 返回均方誤差。如果 B 假定具有協(xié)方差矩陣 σ2V(或 (σ2)×diag(1./W)),則 mse 是 σ2 的估計(jì)值。
[x,stdx,mse,S] = lscov(...) 返回 x 的估計(jì)協(xié)方差矩陣。當(dāng) A 秩虧時(shí),與 x 的必要零元素對(duì)應(yīng)的 S 的行和列中會(huì)包含零。lscov 在使用多個(gè)右端進(jìn)行調(diào)用時(shí)(即如果 size(B,2) > 1)無(wú)法返回 S。
當(dāng) A 和 V 滿秩時(shí),這些數(shù)量的標(biāo)準(zhǔn)公式為:
x = inv(A'*inv(V)*A)*A'*inv(V)*B
mse = B'*(inv(V) - inv(V)*A*inv(A'*inv(V)*A)*A'*inv(V))*B./(m-n)
S = inv(A'*inv(V)*A)*mse
stdx = sqrt(diag(S))
但是,lscov 使用更快、更穩(wěn)定且適合秩虧情況的方法。
lscov 假定已知 B 的協(xié)方差矩陣(僅縮放因子未知)。mse 是該未知縮放因子的估計(jì)值,lscov 對(duì)輸出 S 和 stdx 進(jìn)行相應(yīng)縮放。但是,如果已知 V 完全為 B 的協(xié)方差矩陣,則該縮放是不必要的。要在此情況下獲取正確的估計(jì)值,應(yīng)分別按 1/mse 和 sqrt(1/mse) 重新縮放 S 和 stdx。
示例
示例 1 - 計(jì)算普通最小二乘法
MATLAB? 反斜杠運(yùn)算符 (\) 使您可以通過計(jì)算回歸系數(shù)的普通最小二乘法 (OLS) 來(lái)執(zhí)行線性回歸。您也可以使用 lscov 計(jì)算相同的 OLS 估計(jì)值。通過使用 lscov,還可以計(jì)算這些系數(shù)的標(biāo)準(zhǔn)差的估計(jì)值和回歸差項(xiàng)的標(biāo)準(zhǔn)差。
x1 = [.2 .5 .6 .8 1.0 1.1]';
x2 = [.1 .3 .4 .9 1.1 1.4]';
X = [ones(size(x1)) x1 x2];
y = [.17 .26 .28 .23 .27 .34]';
a = X\y
a =
0.1203
0.3284
-0.1312
[b,se_b,mse] = lscov(X,y)
b =
0.1203
0.3284
-0.1312
se_b =
0.0643
0.2267
0.1488
mse =
0.0015
示例 2 - 計(jì)算加權(quán)最小二乘法
使用 lscov 并通過提供相對(duì)觀測(cè)值權(quán)值的向量來(lái)計(jì)算加權(quán)最小二乘法 (WLS) 擬合。例如,您可能想降權(quán)不可靠觀測(cè)值對(duì)擬合的影響:
w = [1 1 1 1 1 .1]';
[bw,sew_b,msew] = lscov(X,y,w)
bw =
0.1046
0.4614
-0.2621
sew_b =
0.0309
0.1152
0.0814
msew =
3.4741e-004
示例 3 - 計(jì)算廣義最小二乘法
使用 lscov 并通過提供觀測(cè)值協(xié)方差矩陣來(lái)計(jì)算廣義最小二乘法 (GLS) 擬合。例如,您的數(shù)據(jù)可能不相關(guān):
V = .2*ones(length(x1)) + .8*diag(ones(size(x1)));
[bg,sew_b,mseg] = lscov(X,y,V)
bg =
0.1203
0.3284
-0.1312
sew_b =
0.0672
0.2267
0.1488
mseg =
0.0019
示例 4 - 估計(jì)系數(shù)協(xié)方差矩陣
計(jì)算 OLS、WLS 或 GLS 擬合的協(xié)方差矩陣的估計(jì)值。系數(shù)標(biāo)準(zhǔn)差等于以下協(xié)方差矩陣的對(duì)角線上值的平方根:
[b,se_b,mse,S] = lscov(X,y);
S
S =
0.0041 -0.0130 0.0075
-0.0130 0.0514 -0.0328
0.0075 -0.0328 0.0221
[se_b sqrt(diag(S))]
ans =
0.0643 0.0643
0.2267 0.2267
0.1488 0.1488
算法
向量 x 計(jì)算數(shù)量 (A*x-B)'*inv(V)*(A*x-B) 的最小值。此問題的經(jīng)典線性代數(shù)解為
x = inv(A'*inv(V)*A)*A'*inv(V)*B
但 lscov 函數(shù)計(jì)算 A 的 QR 分解,然后根據(jù) V 修改 Q。
參考
[1] Strang, G., Introduction to
Applied Mathematics, Wellesley-Cambridge, 1986, p. 398.
擴(kuò)展功能
C/C++ 代碼生成
使用 MATLAB? Coder? 生成 C 代碼和 C++ 代碼。
用法說(shuō)明和限制:
如果 A 秩虧或 V 為矩陣且秩虧,則必須啟用對(duì)可變大小數(shù)組的支持。
代碼生成不支持對(duì)此函數(shù)使用稀疏矩陣輸入。
在 R2006a 之前推出
總結(jié)
以上是生活随笔為你收集整理的最小二乘擬合matlab,存在已知协方差情况下的最小二乘解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点击率预测模型Embedding层的学习
- 下一篇: 数学 矩阵