You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

含交叉分类协变量的非线性混合模型:生成各组组合的带参数估计的模型方程及参数获取方法

获取Type*Treatment组合的模型方程参数的简便方法

针对你拟合的带偏移量的渐近回归非线性混合模型,想要获取Type*Treatment四个交叉组合对应的带参数估计的模型方程,其实很容易实现——核心是利用固定效应的参数结构,要么手动计算理解逻辑,要么用R代码自动提取生成,下面详细说明:

先明确模型核心结构

我们用的SSasympOff函数对应的模型公式是:

uptake = Asym × (1 - exp(-exp(lrc) × (conc - c0))) ,当 conc ≥ c0
uptake = 0 ,当 conc < c0

其中:

  • c0是全局固定值(模型设定c0 ~ 1
  • Asymlrc都由Type*Treatment交互项决定,每个交叉组合都有专属的Asymlrc,由固定效应的截距加上对应效应项计算而来。

方法1:手动计算(适合理解参数对应关系)

从模型摘要的固定效应部分,我们可以直接推导四个组合的参数:
基准组是Type=Quebec, Treatment=nonchilled,其他组在基准组基础上加上对应的效应项:

  1. Quebec + nonchilled组

    • Asym = Asym.(Intercept) = 41.81755
    • lrc = lrc.(Intercept) = -4.55726
    • c0 = 50.50804
      方程:

    当 conc ≥ 50.508 时,uptake = 41.818 × (1 - exp(-exp(-4.557) × (conc - 50.508)))
    当 conc < 50.508 时,uptake = 0

  2. Quebec + chilled组

    • Asym = 41.81755 + (-2.96942) = 38.84813
    • lrc = -4.55726 + (-0.17124) = -4.72850
    • c0 = 50.50804
  3. Mississippi + nonchilled组

    • Asym = 41.81755 + (-10.53047) = 31.28708
    • lrc = -4.55726 + (-0.10411) = -4.66137
    • c0 = 50.50804
  4. Mississippi + chilled组

    • Asym = 41.81755 -10.53047 -2.96942 -10.89926 = 17.41840
    • lrc = -4.55726 -0.10411 -0.17124 + 0.74124 = -4.09137
    • c0 = 50.50804

方法2:R代码自动提取(简便高效,适合批量处理)

如果不想手动计算,可以用以下代码直接生成所有组合的参数和模型方程:

步骤1:提取固定效应系数

# 提取模型的固定效应系数
fixed_coef <- fixef(fm4CO2.nlme)

步骤2:生成所有Type*Treatment组合

# 创建包含所有交叉组合的数据集
groups <- expand.grid(
  Type = unique(CO2$Type),
  Treatment = unique(CO2$Treatment)
)

步骤3:计算每个组合的Asym和lrc

利用模型矩阵自动计算每个组的参数,避免手动加减出错:

# 计算Asym:基于Type*Treatment的设计矩阵
asym_design <- model.matrix(~ Type * Treatment, data = groups)
groups$Asym <- as.numeric(asym_design %*% fixed_coef[grep("Asym", names(fixed_coef))])

# 计算lrc:同理
lrc_design <- model.matrix(~ Type * Treatment, data = groups)
groups$lrc <- as.numeric(lrc_design %*% fixed_coef[grep("lrc", names(fixed_coef))])

# 添加全局固定的c0
groups$c0 <- fixed_coef["c0"]

步骤4:自动生成模型方程文本

如果想要直接得到每个组的可读方程,可以用mapply拼接文本:

# 生成每个组的模型方程
groups$model_equation <- mapply(function(asym_val, lrc_val, c0_val, type, trt) {
  exp_lrc = exp(lrc_val)
  paste0(
    "【", type, " + ", trt, "组】\n",
    "当 conc ≥ ", round(c0_val, 3), " 时:\n",
    "uptake = ", round(asym_val, 3), " × (1 - exp(-", round(exp_lrc, 5), " × (conc - ", round(c0_val, 3), ")))\n",
    "当 conc < ", round(c0_val, 3), " 时:\n",
    "uptake = 0"
  )
}, groups$Asym, groups$lrc, groups$c0, groups$Type, groups$Treatment)

# 输出所有方程
cat(paste(groups$model_equation, collapse = "\n\n"))

运行后你会得到四个组的完整模型方程,参数都是已经估计好的数值,直接可用。


内容的提问来源于stack exchange,提问作者emudrak

火山引擎 最新活动