主要内容

lscov

存在已知协方差情况下的最小二乘解

    说明

    对于线性系统 A*x = bx = lscov(A,b) 返回最小化误差平方和 r'*r 的最小二乘解,其中 r = b - A*xA 是矩阵,而 b 是列向量。如果 b 是矩阵,则 xb 的对应列分别满足方程。

    示例

    x = lscov(A,b,w) 返回最小化 r'*diag(w)*r 的加权最小二乘解,其中 r = b - A*x

    示例

    x = lscov(A,b,C) 返回最小化 r'*inv(C)*r 的广义最小二乘解,其中 r = b - A*xb 的协方差矩阵与 C 成正比。

    示例

    x = lscov(A,b,C,alg) 指定求解线性系统的算法。默认情况下,lscov 使用 C 的乔列斯基分解来计算 x。将 alg 指定为 "orth",以使用 C 的正交分解。如果 C 不可逆,则 lscov 使用正交分解,而不管 alg 的值如何。

    [x,stdx] = lscov(___) 还返回 x 的估计标准误差。标准误差是 x 的标准差的估计值。您可以使用上述语法中的任何输入参量组合。

    [x,stdx,mse] = lscov(___) 还返回均方误差。均方误差与函数最小化的值成正比。

    示例

    [x,stdx,mse,S] = lscov(___) 还返回 x 的估计协方差矩阵。仅当 b 是列向量时,才能使用此语法。

    示例

    示例

    全部折叠

    为线性系统 A*x = b 创建一个矩阵 A 和向量 b。使用 lscov 计算线性系统的最小二乘解。指定三个输出参量以返回该解、其估计的标准误差和均方误差。

    a1 = [0.2; 0.5; 0.6; 0.8; 1.0; 1.1]; 
    a2 = [0.1; 0.3; 0.4; 0.9; 1.1; 1.4]; 
    A = [ones(size(a1)) a1 a2]; 
    b = [0.17; 0.26; 0.28; 0.23; 0.27; 0.24];
    [x,stdx,mse] = lscov(A,b)
    x = 3×1
    
        0.1018
        0.4844
       -0.2847
    
    
    stdx = 3×1
    
        0.0058
        0.0206
        0.0135
    
    
    mse = 
    1.2774e-05
    

    b 添加噪声以创建采样矩阵,并使用反斜杠运算符 (\) 计算矩阵的最小二乘估计值。计算结果中每行的标准误差。

    B = b + randn(6,1e5);
    X = A\B;
    s1 = std(X,0,2)
    s1 = 3×1
    
        1.6311
        5.7609
        3.7838
    
    

    将使用反斜杠获得的标准误差与使用 lscov 获得的标准误差进行比较。按照 mse 的平方根重新缩放标准误差 stdx 以说明由 lscov 执行的缩放。X 的标准误差通常与通过 lscov 计算的标准误差相符。重新缩放后的标准误差表明,如果 b 的各元素具有均匀的噪声,则 x 的第二个元素受到的影响比第一个元素大得多。

    s2 = stdx/sqrt(mse)
    s2 = 3×1
    
        1.6349
        5.7661
        3.7845
    
    

    为问题 A*x = b 创建 A 矩阵和 b 向量。创建一个相对观测值权重向量,并计算加权最小二乘解。

    a1 = [0.2; 0.5; 0.6; 0.8; 1.0; 1.1]; 
    a2 = [0.1; 0.3; 0.4; 0.9; 1.1; 1.4]; 
    A = [ones(size(a1)) a1 a2]; 
    b = [0.17; 0.26; 0.28; 0.23; 0.27; 0.34];
    w = [1 1 1 1 1 0.1]';
    [x1,stdx1,mse1] = lscov(A,b,w)
    x1 = 3×1
    
        0.1046
        0.4614
       -0.2621
    
    
    stdx1 = 3×1
    
        0.0309
        0.1152
        0.0814
    
    
    mse1 = 
    3.4741e-04
    

    计算同一问题的普通最小二乘解,并绘制这两个解。对于前五个点,加权最小二乘解比普通最小二乘解更接近 b。由于加权最小二乘解的第六个元素向下加权,因此其解的第六个点离 b 更远。

    [x2,stdx2,mse2] = lscov(A,b);
    x = 1:6;
    plot(x,b,"o",x,A*x1,"o",x,A*x2,"o")
    legend("b","Weighted","Ordinary")

    Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent b, Weighted, Ordinary.

    为问题 A*x = b 创建 A 矩阵和 b 向量。创建一个协方差缩放矩阵,并计算广义最小二乘解。

    a1 = [0.2; 0.5; 0.6; 0.8; 1.0; 1.1]; 
    a2 = [0.1; 0.3; 0.4; 0.9; 1.1; 1.4]; 
    A = [ones(size(a1)) a1 a2]; 
    b = [0.17; 0.26; 0.28; 0.23; 0.27; 0.24];
    C = 0.2*ones(size(a1)) + 0.8*diag(ones(size(a1)));
    [x,stdx,mse] = lscov(A,b,C)
    x = 3×1
    
        0.1018
        0.4844
       -0.2847
    
    
    stdx = 3×1
    
        0.0061
        0.0206
        0.0135
    
    
    mse = 
    1.5967e-05
    

    为问题 A*x = b 创建 A 矩阵和 b 向量。计算 x 的协方差矩阵的估计值。

    a1 = [0.2; 0.5; 0.6; 0.8; 1.0; 1.1]; 
    a2 = [0.1; 0.3; 0.4; 0.9; 1.1; 1.4]; 
    A = [ones(size(a1)) a1 a2]; 
    b = [0.17; 0.26; 0.28; 0.23; 0.27; 0.24];
    [x,stdx,mse,S] = lscov(A,b)
    x = 3×1
    
        0.1018
        0.4844
       -0.2847
    
    
    stdx = 3×1
    
        0.0058
        0.0206
        0.0135
    
    
    mse = 
    1.2774e-05
    
    S = 3×3
    10-3 ×
    
        0.0341   -0.1075    0.0617
       -0.1075    0.4247   -0.2712
        0.0617   -0.2712    0.1829
    
    

    系数标准误差等于以下协方差矩阵的对角线上值的平方根。

    sqrt(diag(S))
    ans = 3×1
    
        0.0058
        0.0206
        0.0135
    
    

    输入参数

    全部折叠

    操作数,指定为向量或矩阵。Ab 必须具有相同的行数。如果 b 是矩阵,则 lscovb 的每列返回一个解。

    数据类型: single | double
    复数支持:

    相对权重,指定为非负实数列向量,行数与 A 相同。权重通常是计数或逆方差。当指定此参量时,lscov 返回线性系统 A*x = b 的加权最小二乘解,并使 r'*diag(w)*r 最小化,其中 r = b - A*x

    数据类型: single | double

    缩放协方差矩阵,指定为实对称矩阵(如果是复数矩阵,则为埃尔米特矩阵)。C 可以是正定矩阵,也可以是半定矩阵。如果 C 是正定矩阵,则 lscov 返回线性系统 A*x = b 的最小二乘解,并使 r'*inv(C)*r 最小化,其中 r = b - A*x,协方差矩阵与 C 成比例。

    如果 C 是半正定矩阵,则 lscov 返回 A*x + T*e = b 的解,其中 T*T' = Ce 是此系统有解的所有向量 e 中具有最小范数的向量。仅当 b[A T] 的列空间中时,此系统才有解。

    数据类型: single | double

    最小二乘求解算法,指定为以下值之一:

    • "chol" - 使用 C 的乔列斯基分解,并对该因子求逆以将问题变换为普通最小二乘法。

    • "orth" - 使用正交分解算法。这种算法的计算成本更高,但当 C 是病态或奇异矩阵时,该算法更适用。

    默认情况下,lscov 函数使用乔列斯基分解。但是,如果 lscov 确定 C 是半定矩阵,则该函数使用正交分解算法,而不管 alg 的值如何。

    输出参量

    全部折叠

    解,以向量或矩阵形式返回。如果 Am×n 矩阵,bm×p 矩阵,那么 xn×p 矩阵,包括 p1 的情况。如果 A 是欠定矩阵,则有多个可能的 x。在这种情况下,x 的一些元素限制为零以获得唯一定义的解。

    如果 A 具有满存储,则 x 也具有满存储。如果您指定了缩放协方差矩阵,当 AbC 是稀疏矩阵时,则 x 是稀疏矩阵。否则,如果 Ab 是稀疏矩阵,则 x 是稀疏矩阵。

    估计的标准误差,以向量形式返回。如果缩放协方差矩阵描述 b 中的变化,则标准误差是 x 的标准差的估计值。如果 A 是欠定矩阵,则 stdx 在对应于 x 的受限零元素的元素中包含零。

    lscov 基于均方误差缩放 stdx,但如果已知 C 完全为 b 的协方差矩阵,则缩放是不必要的。在这种情况下,要获得适当的估计值,请按 sqrt(1/mse) 缩放 stdx

    均方误差,以标量形式返回。如果 b 有协方差矩阵 sigma^2*Csigma^2*diag(1./w),则 msesigma^2 的估计值。lscov 假定已知 b 的协方差矩阵(仅缩放因子未知),且 mse 是该未知缩放因子的估计值。

    估计的协方差矩阵。仅当 b 是列向量时,该函数才返回 S。如果 A 是欠定矩阵,则 S 在对应于 x 的受限零元素的行和列中包含零。

    lscov 基于均方误差缩放 S,但如果已知 C 完全为 b 的协方差矩阵,则缩放是不必要的。在这种情况下,要获得适当的估计值,请按 1/mse 缩放 S

    算法

    m×n 矩阵 Am×m 矩阵 C 在广义最小二乘问题中满秩时,这些标准公式表示在 m 大于或等于 nlscov 的输出。

    x = inv(A'*inv(C)*A)*A'*inv(C)*b
    mse = (b - A*x)'*inv(C)*(b - A*x)./(m-n)
    S = inv(A'*inv(C)*A)*mse
    stdx = sqrt(diag(S))

    m 小于 n 时,均方误差为 0。

    对于加权最小二乘法,当用 diag(1./w) 代替 C 时,标准公式适用。对于普通最小二乘法,用单位矩阵代替 C

    lscov 函数使用的方法比标准公式更快也更稳定,而且适用于处理秩亏情况。例如,lscov 计算乔列斯基分解 C = R'*R,然后改用 mldivide 中用于 A\b 求解最小二乘问题的相同算法求解最小二乘问题 (R'\A)*x = (R'\b)

    参考

    [1] Paige, Christopher C. "Computer Solution and Perturbation Analysis of Generalized Linear Least Squares Problems." Mathematics of Computation 33, no. 145 (1979): 171–83. https://doi.org/10.2307/2006034.

    [2] Golub, Gene H., and Charles F. Van Loan. Matrix Computations. Baltimore, MD: Johns Hopkins University Press, 1996.

    [3] Goodall, Colin R. "Computation using the QR decomposition." Handbook of Statistics 9 (1993): 467–508. https://doi.org/10.1016/S0169-7161(05)80137-3.

    [4] Strang, Gilbert. Introduction to Applied Mathematics. Wellesley, MA: Wellesley-Cambridge Press, 1986.

    扩展功能

    全部展开

    版本历史记录

    在 R2006a 之前推出

    另请参阅

    | | |