Мне нужно сжать значения в матрице дисперсии-ковариации в сторону дисперсии (диагональные значения в матрице) с помощью коэффициента сжатия (лямбда), поэтому:
лямбда * усадочная матрица + (1-лямбда) * дисперсионно-ковариационная матрица, где:
Ковариационная матрица дисперсии:
Function VarCovar(rng As Range) As Variant
Dim i As Integer
Dim j As Integer
Dim numcols As Integer
numcols = rng.Columns.Count
numrows = rng.Rows.Count
Dim matrix() As Double
ReDim matrix(numcols - 1, numcols - 1)
For i = 1 To numcols
For j = 1 To numcols
matrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(rng.Columns(i), rng.Columns(j)) * numrows / (numrows - 1)
Next j
Next i
VarCovar = matrix
, это дает мне матрицу, которая выглядит, например, так:
0.40 -0.10 0.11
-0.10 0.17 -0.03
0.11 -0.03 0.19
Тогда у меня проблемы с созданием матрицы усадки, которая должна выглядеть следующим образом:
0.40 0.00 0.00
0.00 0.17 0.00
0.00 0.00 0.19
т.е. возвращает ТОЛЬКО диагональные значения (= дисперсии переменных) и ноль во всех остальных ячейках.
Таким образом, в некотором роде, возвращая матрицу, содержащую только значения для когда строка = номер столбца, т.е.
(1,1), (2,2) и (3,3) значения.
Кто-нибудь может помочь с этим?