最小二乘擬合matlab,存在已知协方差情况下的最小二乘解
lscov
存在已知協方差情況下的最小二乘解
語法
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(...)
說明
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 的每列的一個解。當 rank(A)
< n 時,lscov 將 x 的最大可能元素數設置為零以獲取一個“基本解”。
x = lscov(A,B,w)(其中 w 是長度為 m 的正實數權重向量)返回線性方程組 A*x
= B 的加權最小二乘解,即 x 使得 (B - A*x)'*diag(w)*(B -
A*x) 最小。w 通常包含計數或逆方差。
x = lscov(A,B,V)(其中 V 是 m×m 實對稱正定矩陣)返回協方差矩陣與 V 成比例的線性方程組 A*x = B 的廣義最小二乘解,即 x 使得 (B - A*x)'*inv(V)*(B -
A*x) 最小。
更為常見的情況是,V 可以是半正定矩陣,lscov 返回在 A*x
+ T*e = B 約束下,使得 e'*e 最小的 x,最小值計算基于 x、e 和 T*T' = V。當 V 為半正定矩陣時,僅當 B 與 A 和 V 一致(即 B 位于 [A T] 列空間內),此問題才有一個解,否則 lscov 將返回錯誤。
默認情況下,lscov 計算 V 的 Cholesky 分解,實際上是反轉該因子以將該問題轉變為普通最小二乘法。但是,如果 lscov 確定 V 為半正定矩陣,它將使用正交分解算法以避免對 V 求逆。
x = lscov(A,B,V,alg) 指定當 V 為矩陣時用于計算 x 的算法。alg 可以具有以下值:
'chol' 使用 V 的 Cholesky 分解。
'orth' 使用正交分解,它在 V 是病態或為奇異矩陣時更合適,但計算的開銷更高。
[x,stdx] = lscov(...) 返回 x 的估計標準誤差。當 A 秩虧時,與 x 的必要零元素對應的 stdx 元素中會包含零。
[x,stdx,mse] = lscov(...) 返回均方誤差。如果 B 假定具有協方差矩陣 σ2V(或 (σ2)×diag(1./W)),則 mse 是 σ2 的估計值。
[x,stdx,mse,S] = lscov(...) 返回 x 的估計協方差矩陣。當 A 秩虧時,與 x 的必要零元素對應的 S 的行和列中會包含零。lscov 在使用多個右端進行調用時(即如果 size(B,2) > 1)無法返回 S。
當 A 和 V 滿秩時,這些數量的標準公式為:
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 使用更快、更穩定且適合秩虧情況的方法。
lscov 假定已知 B 的協方差矩陣(僅縮放因子未知)。mse 是該未知縮放因子的估計值,lscov 對輸出 S 和 stdx 進行相應縮放。但是,如果已知 V 完全為 B 的協方差矩陣,則該縮放是不必要的。要在此情況下獲取正確的估計值,應分別按 1/mse 和 sqrt(1/mse) 重新縮放 S 和 stdx。
示例
示例 1 - 計算普通最小二乘法
MATLAB? 反斜杠運算符 (\) 使您可以通過計算回歸系數的普通最小二乘法 (OLS) 來執行線性回歸。您也可以使用 lscov 計算相同的 OLS 估計值。通過使用 lscov,還可以計算這些系數的標準差的估計值和回歸差項的標準差。
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 - 計算加權最小二乘法
使用 lscov 并通過提供相對觀測值權值的向量來計算加權最小二乘法 (WLS) 擬合。例如,您可能想降權不可靠觀測值對擬合的影響:
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 - 計算廣義最小二乘法
使用 lscov 并通過提供觀測值協方差矩陣來計算廣義最小二乘法 (GLS) 擬合。例如,您的數據可能不相關:
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 - 估計系數協方差矩陣
計算 OLS、WLS 或 GLS 擬合的協方差矩陣的估計值。系數標準差等于以下協方差矩陣的對角線上值的平方根:
[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 計算數量 (A*x-B)'*inv(V)*(A*x-B) 的最小值。此問題的經典線性代數解為
x = inv(A'*inv(V)*A)*A'*inv(V)*B
但 lscov 函數計算 A 的 QR 分解,然后根據 V 修改 Q。
參考
[1] Strang, G., Introduction to
Applied Mathematics, Wellesley-Cambridge, 1986, p. 398.
擴展功能
C/C++ 代碼生成
使用 MATLAB? Coder? 生成 C 代碼和 C++ 代碼。
用法說明和限制:
如果 A 秩虧或 V 為矩陣且秩虧,則必須啟用對可變大小數組的支持。
代碼生成不支持對此函數使用稀疏矩陣輸入。
在 R2006a 之前推出
總結
以上是生活随笔為你收集整理的最小二乘擬合matlab,存在已知协方差情况下的最小二乘解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点击率预测模型Embedding层的学习
- 下一篇: 鲍鱼数据集处理/matlab