Решение методом наименьших квадратов в присутствии известной ковариации
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
вектор n на 1, который минимизирует сумму квадратичных невязок (B - A*x)'*(B - A*x)
, где 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 действительной симметричной положительно определенной матрицей, возвращает обобщенное решение методом наименьших квадратов в линейную систему A*x = B
с ковариационной матрицей, пропорциональной V
, то есть x
минимизирует (B - A*x)'*inv(V)*(B - A*x)
.
В более общем плане V
может быть положительным полуопределенным, и lscov
возвращает x
который минимизирует e'*e
, при условии A*x + T*e = B
, где минимизация закончилась x
и e
, и T*T' = V
. Когда V
является полуопределенным, эта задача имеет решение только в том случае, если B
согласуется с A
и V
(то есть B
находится в пространстве столбцов [A T]
), в противном случае lscov
возвращает ошибку.
По умолчанию lscov
вычисляет разложение Холецкого V
и, в эффект, инвертирует этот коэффициент, чтобы преобразовать задачу в обычные наименьшие квадраты. Однако, если lscov
определяет, что V
является полуопределенным, он использует алгоритм ортогонального разложения, который избегает инвертирования V
.
x = lscov(A,B,V,alg)
задает алгоритм, используемый для вычисления x
когда V
является матрицей. alg
может иметь следующие значения:
'chol'
использует факторизацию Холецкого V
.
'orth'
использует ортогональные разложения, и более уместно, когда V
является плохо обусловленной или сингулярной, но в вычислительном отношении дороже.
[x,stdx] = lscov(...)
возвращает предполагаемые стандартные ошибки x
. Когда A
имеет неполный ранг, stdx
содержит нули в элементах, соответствующих обязательно нулевым элементам x
.
[x,stdx,mse] = lscov(...)
возвращает среднюю квадратичную невязку. Если B
принято, что имеет ковариационную матрицу2V
(или (2) × <reservedrangesplaceholder0>
(1. / W
)), затем mse
- оценка2.
[x,stdx,mse,S] = lscov(...)
возвращает предполагаемую ковариационную матрицу x
. Когда A
имеет неполный ранг, S
содержит нули в строках и столбцах, соответствующих обязательно нулевым элементам x
. lscov
не может вернуться S
если он вызывается с несколькими правыми сторонами, то есть если size(B,2) > 1
.
Стандартные формулы для этих величин, когда 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
, тогда это масштабирование ненужно. Чтобы получить соответствующие оценки в этом случае, вы должны пересмотреть S
и stdx
по 1/mse
и sqrt(1/mse)
, соответственно.
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
Использовать 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
Использовать 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
Вычислите оценку ковариационной матрицы коэффициента для подгонки 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
функция вместо этого вычисляет QR-разложение A
а затем изменяет Q
по V
.
[1] Strang, G., Introduction to Applied Mathematics, Wellesley-Cambridge, 1986, p. 398.