我是新编码以及在论坛上发帖但我会尽力解释问题并提供足够的背景知识,以便您能够帮助我完成它。我已经做了很多寻找类似错误的解决方案但是生成它的所有代码以及它背后的数据格式都非常不同。
我正在处理由各种增长类别组成的生物数据,但我感兴趣的只是长度(我的代码中的SCL)和年龄(我的代码中的年龄)。随着时间的推移,我对每个人都有很多长度和年龄估计值,我将线性nlme模型拟合到青少年年龄,并将Von Bert曲线拟合到成熟年龄。我的少年模型工作正常,我提取h(线的斜率)和t(x截距)。我现在需要使用这些参数以及T(成熟时的已知年龄)来适应成熟阶段。成熟的模型将估计K(这是我唯一未知的)。我已经为一个人(ID50)包含了我的一部分数据。这是仅在成熟年份的信息,其中h和t来自最右边的列中的青少年适合度。
我的数据子集:
这格式不是很好,但我不确定如何显示它
分组数据:SCL~年龄| ID
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 [,nm]中的错误:维数不正确
这告诉我它正在尝试估计不同数量的参数(我认为)。最初我适合所有成熟的人(bur为了简化我现在正试图适应一个)。以下是我对模型代码的所有变体,所有这些变体都产生了同样的错误:
其中大部分是为了改变R认为需要估计的参数数量,但是没有一个对我有用。
答案 0 :(得分:0)
我不是nlme的专家,在拟合模型时经常遇到类似的问题,特别是当你不能使用nlsList开始时。我的猜测是你的函数中有4个参数(h,T,t,k),但你只估计其中一个是固定效果和随机效应。我相信这会将其他参数约束为零,这实际上会将它们从模型中消除(但你仍然可以在模型中使用它们!)。通常,您将所有参数都包含在固定中,然后尝试确定其中有多少参数也要具有随机效果。所以我会在fixed参数和start参数中包含所有4个。由于您有4个参数,每个参数必须是固定的或随机的,或两者兼而有之 - 否则,它们如何在模型中?