Может ли lsqlincon (или аналогичная функция) в R повторять результаты lsqlin в MATLAB для матриц данных, которые не имеют полного ранга столбца? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь скопировать код, написанный изначально в MATLAB / Octave, на языке программирования R. Это ограниченная проблема оптимизации с использованием функции lsqlin , доступной в MATLAB и Octave. Последний бесплатный, поэтому я делюсь кодом Октава , который выглядит следующим образом:

pkg load optim
options = optimset('Display','off')
X = [1 2 8 11 -4 3; 2 8 6 1 10 -7; -10 -15 3 9 17 -11; -2 -3 -4 -5 -9 71]
y = [4;-1;5;7]
[b_reg,~,residual,~,~,lambda] = lsqlin(X, y, ones(1, size(X, 2)), 1, '', '', zeros(size(X, 2), 1), ones(size(X, 2), 1), [], options);
b_reg'

Это распечатывает расчетные коэффициенты:

ans =
   0.00000   0.00000   0.00000   0.41553   0.11882   0.14305

Можно видеть, что матрица $ X $ не является полным рангом столбца, но функция оценивает 3 из 6 оцененных коэффициентов в ноль, так что число предикторов (3) меньше количества наблюдений (4).

Я попытался повторить то же самое в R следующим образом:

require(Matrix)
require(pracma)
require(quadprog)

X <- matrix(data = c(1, 2, 8, 11, -4, 3, 
                     2, 8, 6, 1, 10, -7, 
                     -10, -15, 3, 9, 17, -11, 
                     -2, -3, -4, -5, -9, 71), 
            byrow = TRUE, 
            ncol = 6)

y <- matrix(data = c(4, -1, 5, 7), ncol = 1)

pracma::lsqlincon(C = X, 
                  d = y, 
                  A = ones(1, ncol(X)), 
                  b = 1, 
                  lb = zeros(ncol(X), 1), 
                  ub = ones(ncol(X), 1))

Приведенный выше код R такой же, как и его эквивалент MATLAB / Octave. Однако R не может иметь дело с матрицей, которая не является полным рангом. Я получаю следующую ошибку:

Error in quadprog::solve.QP(Dmat, dvec, t(Amat), bvec, meq = meq) : 
  matrix D in quadratic function is not positive definite!

Поиск предложений о возможных альтернативах в среде программирования R для достижения почти идеальной репликации кода MATLAB.

...