Ошибка в pars[, нм]: неправильное количество измерений

Я новичок в кодировании, а также в размещении сообщений на форуме, но я сделаю все возможное, чтобы объяснить проблему и дать достаточно информации, чтобы вы могли помочь мне решить ее. Я много искал решения для подобных ошибок, но весь код, который их создает, и формат данных, стоящих за ним, очень разные.

Я работаю с биологическими данными, которые состоят из различных категорий роста, но все, что меня интересует, это длина (SCL в моем коде) и возраст (Age в моем коде). У меня есть много оценок длины и возраста для каждого человека во времени, и я подгоняю линейную линейную модель к юношескому возрасту и кривую фон Берта к зрелому возрасту. Моя ювенальная модель работает просто отлично, и я извлек h (наклон линии) и t (пересечение x). Теперь мне нужно использовать эти параметры, а также T (известный возраст достижения зрелости), чтобы соответствовать стадии зрелости. Зрелая модель оценит K (это мое единственное неизвестное). Я включил подмножество своих данных для одного человека (ID50). Это информация только для зрелых лет с добавлением h и t из его ювенильной посадки в крайних правых столбцах.

Подмножество моих данных:

Это не очень хорошо отформатировано, но я не уверен, как еще это отобразить.

Сгруппированные данные: SCL ~ возраст | Я БЫ

ID  SCL Age     Sex Location MeanSCL Growth Year Status   T     h       t
50 86.8 27.75 Female   VA    86.8    0.2    1994 Mature 27.75 1.807394 -19.83368
50 86.9 28.75 Female   VA    87.1    0.4    1995 Mature 27.75 1.807394 -19.83368
50 87.3 29.75 Female   VA    87.5    0.5    1996 Mature 27.75 1.807394 -19.83368
50 87.8 30.75 Female   VA     88     0.4    1997 Mature 27.75 1.807394 -19.83368
50 88.1 31.75 Female   VA    88.1      0    1998 Mature 27.75 1.807394 -19.83368
50 88.1 32.75 Female   VA    88.2      0    1999 Mature 27.75 1.807394 -19.83368
50 88.2 33.75 Female   VA    88.3    0.2    2000 Mature 27.75 1.807394 -19.83368
50 88.4 34.75 Female   VA    88.4    0.1    2001 Mature 27.75 1.807394 -19.83368
50 88.4 35.75 Female   VA    88.4      0    2002 Mature 27.75 1.807394 -19.83368
50 88.5 36.75 Female   VA    88.5      0    2003 Mature 27.75 1.807394 -19.83368

Это функция роста:

vbBiphasic = function(Age,h,T,t,K) {
                 y=(h/(exp(K)-1))*(1-exp(K*((T+log(1-(exp(K)-1)*(T-t))/K)-Age)))
             }

Это исходная модель роста, которая ДОЛЖНА соответствовать:

ID50 относится к моему набору данных только с отдельными 50

VB_mat <- nlme(SCL~vbBiphasic(Age,h,T,t,K),
               data = ID50,
               fixed = list(K~1),
               random = K~1,
               start = list(fixed=c(K~.01))
          )

Однако эта модель выдает ошибку:

Ошибка в pars[, нм]: неправильное количество измерений

Что говорит мне о том, что он пытается оценить другое количество параметров, чем у меня (я думаю). Изначально я подгонял его ко всем зрелым особям (но сейчас для упрощения пытаюсь подгонять к одному). Вот все мои варианты кода модели, ВСЕ они привели к одной и той же ошибке:

  • ввод усредненных значений (Возраст, h, T,t,K) всей популяции вместо переменных.
  • используя подмножество из 5 человек и обоих (возраст, h, T, t, K), а также усредненные значения для этих людей для каждой переменной.
  • используя 5 разных людей отдельно с обоими (Age, h, T, t, k), а также с их фактическими значениями для этих переменных (все выполнялись индивидуально, т.е. 10 разных строк кода на случай, если некоторые сработают, а другие нет ... но ни один не сделал).
  • Указание модели оценить все параметры, а не только K
  • исключая все параметры, кроме K
  • Превращение всех значений в векторы (это то, что сказал один форум с похожей ошибкой)

Большинство из них были направлены на изменение количества параметров, которые, по мнению R, необходимо было оценить, однако ни один из них не сработал для меня.


person L.Schroeder    schedule 24.03.2016    source источник


Ответы (1)


Я не эксперт по nlme и часто сталкиваюсь с подобными проблемами при подборе моделей, особенно когда вы не можете использовать nlsList для начала работы. Я предполагаю, что у вас есть 4 параметра в вашей функции (h, T, t, k), но вы оцениваете только один из них как с фиксированным эффектом, так и со случайным эффектом. Я полагаю, что это затем ограничивает другие параметры до нуля, что фактически исключает их из модели (но они все еще есть в модели!). Обычно вы включаете все параметры как фиксированные, а затем пытаетесь решить, сколько из них также хотите иметь случайный эффект. Поэтому я бы включил все 4 в фиксированный аргумент и начальный аргумент. Поскольку у вас 4 параметра, каждый должен быть либо фиксированным, либо случайным, либо и тем, и другим — иначе как они могут быть в модели?

person rabil    schedule 11.11.2016
comment
Извините, похоже, я неправильно понял вашу функцию. Теперь я вижу, что h, T и t являются наблюдаемыми значениями, а не оцениваемыми параметрами модели. start = list(fixed=c(K~.01) - person rabil; 11.11.2016
comment
начало = список (фиксированный = c (K ~ .01) - person rabil; 11.11.2016
comment
начало = список (фиксированный = c (K ~ .01) - person rabil; 11.11.2016
comment
У меня проблемы с добавлением комментариев. начало = список (фиксированный = c (K ~ .01) - person rabil; 11.11.2016
comment
Ваш начальный аргумент неверен: start = list(fixed=c(K~.01) - person rabil; 11.11.2016
comment
Должно быть: start = list(fixed=c(K=.01) . Каждый раз, когда я нажимаю клавишу ввода, он добавляет комментарий, поэтому я не могу расставить свой ответ. Вам нужно = вместо ~. Вам также может понадобиться измените c (K = 0,01) на список (K = 0,01). - person rabil; 11.11.2016