【问题标题】:Error in pars[, nm] : incorrect number of dimensionspars[, nm] 中的错误:维数不正确
【发布时间】: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 认为需要估计的参数数量,但是没有一个对我有用。

【问题讨论】:

    标签: r nlme


    【解决方案1】:

    我不是 nlme 方面的专家,在拟合模型时经常会遇到类似的问题,尤其是当您无法使用 nlsList 开始时。我的猜测是您的函数中有 4 个参数(h、T、t、k),但您只是将其中一个估计为固定效应和随机效应。我相信这会将其他参数限制为零,这实际上会将它们从模型中消除(但你仍然在模型中拥有它们!)。通常,您将所有参数都包含在内,然后尝试确定您还希望其中多少具有随机效果。所以我会在固定参数和开始参数中包含所有 4 个。由于您有 4 个参数,因此每个参数必须是固定的或随机的,或两者兼而有之 - 否则,它们怎么会出现在模型中?

    【讨论】:

    • 抱歉,我好像误解了你的功能。我现在看到 h、T 和 t 是观察值,而不是要估计的模型参数。start = list(fixed=c(K~.01)
    • start = list(fixed=c(K~.01)
    • start = list(fixed=c(K~.01)
    • 我无法添加 cmets。 start = list(fixed=c(K~.01)
    • 你的起始参数不正确:start = list(fixed=c(K~.01)
    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多