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

#python #r #parameters #nls #estimation

#python #r #параметры #nls #оценка

Вопрос:

nls((mortalityof2018) ~(i g * h ^ возраст),start = list(g = 1, h = 1, i = 1))

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

Каждый раз, когда я ввожу приведенный выше код, я получаю сообщение об ошибке с указанием сингулярной градиентной матрицы при начальных оценках параметров. пожалуйста, помогите. для справки как mortalityof2018, так и возраст — это вектор, содержащий 111 значений

PS = я пытаюсь подогнать модель makeham (A B * c ^ x) к mortalityof2018 и, следовательно, пытаюсь оценить параметры с использованием nls

Комментарии:

1. Ну, вам нужны лучшие начальные значения. Начальное значение h = 1 кажется плохим выбором.

2. > nls((mortalityof2018)~(i g *(h ^ возраст)), start = list(g = 0.1, h = 0.1, i = 1)) Ошибка в nls((mortalityof2018) ~ (i g * (h ^ возраст)), start = list(g = 0.1, : коэффициент шага 0.000488281 уменьшен ниже «минимального коэффициента» 0.000976562. я попытался использовать другое значение и получить другую ошибку

3. Да, вам следует потратить больше усилий на поиск хороших начальных значений. Я бы посмотрел на график данных, чтобы получить приличное начальное значение i . Тогда я бы использовал lm для подгонки log(y - i) = log(g) log(h) * age . Коэффициенты lm соответствия должны (после возведения в степень) быть приличными начальными значениями для g и h .

4. Используйте plinear , чтобы избежать необходимости указывать начальные значения для линейных параметров: nls(mortalityof2018 ~ cbind(1, h^age), algorithm = "plinear", start = c(h = ...)) где … заменяется оценкой h. Повторяйте это несколько раз для разных значений h, пока не добьетесь успеха. Пакет nls2 может помочь автоматизировать это. Обратите внимание, что обычно вы не получите никаких ответов, если не предоставите полный воспроизводимый пример. Никто не может запустить код в вопросе, кроме вас, потому что входные данные отсутствуют.