nls (): «Ошибка в nlsModel (формула, mf, start, wts): единичная матрица градиента при начальных оценках параметров» - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь использовать nls(), но получаю сообщение об ошибке

Ошибка в nlsModel (формула, mf, start, wts): сингулярная матрица градиента при начальных оценках параметров

и я не уверен, где проблема.

Код ниже:

TI <- c(0.5, 2, 5, 10, 30)
prices <- cbind(zi, TI)
prices = as.data.frame(prices)

lnz_i <- function(TI, Alpha, Beta, Sigma) -TI*(Alpha*(1 - exp(-Beta*TI)) / (Beta) - (Sigma^2/2)*(1 - exp(-Beta*TI)) / (Beta)^2) - 0.02*(1 - exp(-Beta*TI)) / (Beta)

nls(zi ~ lnz_i(TI, Alpha, Beta, Sigma), start = c(Alpha = 0.02, Beta = 0.3, Sigma = 0.06), data = prices)

Любая помощь очень ценится.

1 Ответ

1 голос
/ 26 марта 2019

Вы имеете взаимную корреляцию между коэффициентами Альфа и Сигма .Простое решение состоит в том, чтобы держать один из них постоянным.Может быть, было бы лучше переформулировать уравнение и заменить Альфа или Сигма.

set.seed(1)
lnz_i <- function(TI, Alpha, Beta, Sigma) -TI*(Alpha*(1 - exp(-Beta*TI)) / (Beta) - (Sigma^2/2)*(1 - exp(-Beta*TI)) / (Beta)^2) - 0.02*(1 - exp(-Beta*TI)) / (Beta)
TI <- c(0.5, 2, 5, 10, 30)
prices <- data.frame(TI, zi=lnz_i(TI, 0.02, 0.3, 0.06)*runif(length(TI), .9, 1.1))

#Hold Alpha Fixed
Alpha <- 0.02 
nls(zi ~ lnz_i(TI, Alpha, Beta, Sigma), start = c(Beta=0.3, Sigma = 0.06), data = prices)
Alpha <- 0.04
nls(zi ~ lnz_i(TI, Alpha, Beta, Sigma), start = c(Beta=0.3, Sigma = 0.06), data = prices)
Alpha <- 0.1
nls(zi ~ lnz_i(TI, Alpha, Beta, Sigma), start = c(Beta=0.3, Sigma = 0.2), data = prices)
#Estimate for Beta is all the time 0.401 and residuals are at 0.003768,
#only Sigma is changing when Alpha is changed

#Hold Sigma Fixed
Sigma <- 0.06
nls(zi ~ lnz_i(TI, Alpha, Beta, Sigma), start = c(Alpha = 0.02, Beta = 0.3), data = prices)
Sigma <- 0.03
nls(zi ~ lnz_i(TI, Alpha, Beta, Sigma), start = c(Alpha = 0.02, Beta = 0.3), data = prices)
...