【发布时间】:2016-11-12 03:04:35
【问题描述】:
我是编码新手以及在论坛上发帖,但我会尽力解释问题并提供足够的背景知识,以便您能够帮助我解决问题。我已经做了很多寻找类似错误的解决方案,但是产生它的所有代码和它背后的数据格式都非常不同。
我正在处理由各种增长类别组成的生物数据,但我感兴趣的只是长度(我的代码中的 SCL)和年龄(我的代码中的年龄)。随着时间的推移,我对每个人有很多长度和年龄估计,我将线性 nlme 模型拟合到青少年年龄,并将 Von Bert 曲线拟合到成熟年龄。我的少年模型工作得很好,我提取了 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[, nm] 中的错误:维数不正确
这告诉我它试图估计的参数数量与我所拥有的不同(我认为)。最初我将它适合所有成熟的人(为了简单起见,我现在试图适合一个人)。这是我对模型代码的所有变体,它们都产生了相同的错误:
- 输入全人群(Age, h, T,t,K)的平均值 而不是变量。
- 使用 5 个个体的子集和(年龄、h、T、t、K)以及这些个体的每个变量的平均值。
- 分别使用 5 个不同的个体(年龄、h、T、t、k)以及这些变量的实际值(全部运行 单独,即10个不同的代码字符串,以防万一 工作,而其他人没有......但没有人这样做)。
- 告诉模型估计所有参数,而不仅仅是 K
- 消除除 K 以外的所有参数
- 将所有值转换为向量(这是一个有类似错误的论坛所说的)
其中大部分是为了改变 R 认为需要估计的参数数量,但是没有一个对我有用。
【问题讨论】: