Я новичок в кодировании, а также в размещении сообщений на форуме, но я сделаю все возможное, чтобы объяснить проблему и дать достаточно информации, чтобы вы могли помочь мне решить ее. Я много искал решения для подобных ошибок, но весь код, который их создает, и формат данных, стоящих за ним, очень разные.
Я работаю с биологическими данными, которые состоят из различных категорий роста, но все, что меня интересует, это длина (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, необходимо было оценить, однако ни один из них не сработал для меня.