挖掘具有多个参数的 nlme 模型
dredge an nlme model with multiple parameters
免责声明:
首先,我试图为一个可重现的例子创建一个模拟数据集,但是每当我创建一个随机集或取一部分真实数据时,模型都不会收敛。我看不到为没有真实数据的可重现示例提供必要的 material 的方法。如果认为有必要并且有人愿意提供帮助,我可以post真实数据
我认为这个 post 是在解决类似的想法,但评论没有解释如何解决 'hacking' 这个特殊的编码挑战。
Adding covariates to nlme model in R
- 我知道 issues/debate/literature 与数据挖掘有关,但无论如何都想解决这个问题。
概览:
使用来自多个站点的解释性非自然变量(自变量)对固着物种(因变量)的覆盖百分比进行建模。
在其他人的帮助下,我使用 R 中的 nlme 包创建了以下逻辑增长模型。百分比覆盖率依赖于四个模型参数。 Days 只是进行测量的天数。 MaxPop = 每个给定站点的最大人口(百分比覆盖 - 在 0 -100% 之间)。 Days50 = 50% 的 MaxPop 花费的时间(以天为单位)。 Hill = 通过拐点控制增长和斜率的滞后。 MaxPop、Days50 和 Hill 均由独立的非生物变量、温度、水加速度、盐度和 pH 值(必要时居中)组成。
Global_Model <- nlme(PercentCover ~ I(100 *((inv.logit(exp(MaxPop) *Days^Hill/(exp(Days50)^Hill + Days^Hill))-0.5)*2)),
data = Data15,
fixed = list(MaxPop ~ I(Temp-14) + Accel + I(Sal-30) + I(pH-8), LogDays50 ~ I(Temp-14) + Accel + I(Sal-30) +I(pH-8), Hill ~ I(Temp-14) + Accel + I(Sal-30) + I(pH-8)),
random = MaxPop ~1|Site,
start = c(11, -1, -1925, 1.6, 0, 7.4, -0.2, -776, 0.6, 0, 3.9, -.004, 2009, -0.3, 0), control = nlmeControl(maxIter=100), verbose = T)
我从一组预定义的理论模型开始,但我继续开发一个全局模型,因为所有非生物变量都是预先选择的,并且都有包含在模型中的理论原因。希望这会降低全局模型过度拟合的风险。
使用 MuMIn
包,我尝试使用 dredge(Global_Model)
到 运行 全局模型中的所有嵌套模型,但得到 "Error in FUN(X[[i]], ...) : subscript out of bounds"
我不确定如何着手尝试这个,因为每个模型参数(MaxPop、Day50 和 Hill)都由相同的四个独立变量组成。我想要 运行 一个测试参数内和参数间 IV 的每个排列的挖掘机。
问题:
是否可以在 nlme 中执行 'dredge-like' 过程?
怎么办?
______
非常感谢您的建议。
干杯!
您需要围绕 nlme
编写一个 "wrapper" 函数,将线性公式(例如 y ~ x1 + x2 + x3
)映射到三个 nlme
分量:fixed
和 random
(我假设你想对所有人保持相同的 model
),然后将其提供给 dredge
。这是可行的,但很棘手。
免责声明:
首先,我试图为一个可重现的例子创建一个模拟数据集,但是每当我创建一个随机集或取一部分真实数据时,模型都不会收敛。我看不到为没有真实数据的可重现示例提供必要的 material 的方法。如果认为有必要并且有人愿意提供帮助,我可以post真实数据
我认为这个 post 是在解决类似的想法,但评论没有解释如何解决 'hacking' 这个特殊的编码挑战。
Adding covariates to nlme model in R
- 我知道 issues/debate/literature 与数据挖掘有关,但无论如何都想解决这个问题。
概览:
使用来自多个站点的解释性非自然变量(自变量)对固着物种(因变量)的覆盖百分比进行建模。
在其他人的帮助下,我使用 R 中的 nlme 包创建了以下逻辑增长模型。百分比覆盖率依赖于四个模型参数。 Days 只是进行测量的天数。 MaxPop = 每个给定站点的最大人口(百分比覆盖 - 在 0 -100% 之间)。 Days50 = 50% 的 MaxPop 花费的时间(以天为单位)。 Hill = 通过拐点控制增长和斜率的滞后。 MaxPop、Days50 和 Hill 均由独立的非生物变量、温度、水加速度、盐度和 pH 值(必要时居中)组成。
Global_Model <- nlme(PercentCover ~ I(100 *((inv.logit(exp(MaxPop) *Days^Hill/(exp(Days50)^Hill + Days^Hill))-0.5)*2)),
data = Data15,
fixed = list(MaxPop ~ I(Temp-14) + Accel + I(Sal-30) + I(pH-8), LogDays50 ~ I(Temp-14) + Accel + I(Sal-30) +I(pH-8), Hill ~ I(Temp-14) + Accel + I(Sal-30) + I(pH-8)),
random = MaxPop ~1|Site,
start = c(11, -1, -1925, 1.6, 0, 7.4, -0.2, -776, 0.6, 0, 3.9, -.004, 2009, -0.3, 0), control = nlmeControl(maxIter=100), verbose = T)
我从一组预定义的理论模型开始,但我继续开发一个全局模型,因为所有非生物变量都是预先选择的,并且都有包含在模型中的理论原因。希望这会降低全局模型过度拟合的风险。
使用 MuMIn
包,我尝试使用 dredge(Global_Model)
到 运行 全局模型中的所有嵌套模型,但得到 "Error in FUN(X[[i]], ...) : subscript out of bounds"
我不确定如何着手尝试这个,因为每个模型参数(MaxPop、Day50 和 Hill)都由相同的四个独立变量组成。我想要 运行 一个测试参数内和参数间 IV 的每个排列的挖掘机。
问题:
是否可以在 nlme 中执行 'dredge-like' 过程?
怎么办?
______
非常感谢您的建议。
干杯!
您需要围绕 nlme
编写一个 "wrapper" 函数,将线性公式(例如 y ~ x1 + x2 + x3
)映射到三个 nlme
分量:fixed
和 random
(我假设你想对所有人保持相同的 model
),然后将其提供给 dredge
。这是可行的,但很棘手。