联合回归模型——R语言包(GJRM)

📅 2026/7/31 18:02:23 👁️ 阅读次数 📝 编程学习
联合回归模型——R语言包(GJRM)

目录

  • 1、简介
    • 1.1、主要功能与模型支持
    • 1.2、主要应用领域
    • 1.3、学术引用
  • 2、核心函数简介——gjrm()
    • 2.1、模型核心框架
    • 2.2、 主要参数解析
    • 2.3、 重要特性
    • 2.4、 示例代码(文档中的典型用法)
    • 2.5、 对用户的关键建议

1、简介

GJRM(Generalised Joint Regression Modelling) 是一个R语言软件包,用于构建和拟合灵活的联合回归模型,其核心特点是能够处理多个响应变量之间的关联性(即误差项相关)。
它通过使用copula(连接函数)来建模变量间的线性和非线性依赖关系,同时允许每个变量的边缘分布和依赖参数本身都作为协变量的灵活函数进行建模。该包最早名为SemiParBIVProbit,随着功能大幅扩展,现已更名为GJRM以更准确地反映其能力。

1.1、主要功能与模型支持

  • 模型类型广泛:支持二元(双变量)回归模型、样本选择模型、三元(三变量)二元模型,以及处理连续、离散、计数和生存数据等各类结局变量的联合模型。
  • 灵活的效应估计:可以通过惩罚回归样条(penalised regression splines)来估计协变量的非线性、平滑效应,其平滑参数选择机制借鉴了mgcv包。
  • 丰富的分布选择:支持多种边缘分布(如泊松、负二项、正态、生存分布等)和多种copula函数(如高斯、Frank、Clayton等)。
  • 估计与推断:采用基于惩罚似然的信赖域算法(trust region algorithm)进行参数估计,并提供基于贝叶斯近似的置信区间和用于检验光滑项的p值。

1.2、主要应用领域

GJRM的灵活性使其在多个领域得到应用,例如在体育分析中建模足球比赛主客队进球数的相关性,在健康经济学中处理带有样本选择或体制转换的数据,以及在生存分析中处理混合删失数据。

1.3、学术引用

在学术成果中使用GJRM时,通常建议引用其核心方法论论文或软件包本身。软件包作者提供的引用信息如下:

Marra G, Radice R (2024).GJRM: Generalised Joint Regression Modelling. R package version 0.2-6.7.

该包的主要作者是Giampiero Marra (伦敦大学学院) 和 Rosalba Radice (伦敦大学城市学院),其维护和开发获得了EPSRC的资助。更多详细信息可参考CRAN上的官方页面或作者于2025年出版的专著《Copula Additive Distributional Regression Using R》。

2、核心函数简介——gjrm()

gjrm()详细给出了如何拟合具有二元/连续/离散/生存边缘分布的广义联合回归模型。

以下是对函数内容的梳理和关键点解读:

2.1、模型核心框架

gjrm通过Copula(连接函数)将多个响应变量的边缘分布连接起来,并同时建模:

  • 边缘分布margins):每个响应变量可以服从不同的分布(如正态、泊松、Weibull、二项式logit/probit等)。
  • 依赖结构copula):通过Copula函数(如Gaussian、Clayton、Frank等)描述变量间的相关性,且依赖参数(θ)本身也可以作为协变量的函数进行建模。
  • 方程类型model):支持双变量/三变量模型、样本选择模型(BSS/TSS)、部分可观测模型(BPO)和体制转换模型(SWITCH)。

2.2、 主要参数解析

参数作用
formula核心参数。通常是一个列表,包含2个(或3个)公式。使用mgcv风格的s()指定平滑项。
margins指定每个响应的边缘分布,如"N"(正态)、"P"(泊松)、"probit"(二元probit)、"WEI"(Weibull)等。
copula指定Copula函数类型,如"N"(高斯)、"C0"(Clayton)、"F"(Frank)等,可处理正负尾依赖。
model模型结构:"B"(双变量)、"T"(三变量)、"BSS"(样本选择)等。
cens1/cens2生存分析中的删失指示符,支持右删失、区间删失等。
uni.fitTRUE,先拟合单变量模型获取初值,有助于收敛。
penCor三变量二元模型中相关系数的惩罚类型(lasso/ridge等)。

2.3、 重要特性

  • 非线性效应:通过mgcv风格的平滑样条(s())自动估计,并利用惩罚似然选择平滑参数。
  • 收敛诊断:使用conv.check()检查分数和信息矩阵,若收敛失败,文档建议:
    • 尝试uni.fit = TRUE获取更好初值;
    • 简化模型或更换Copula/边缘分布;
    • 检查数据稀疏性或模型设定是否合理(例如,使用Clayton 90°旋转Copula但实际为正相关会导致失败)。
  • 样本选择模型注意事项:确保选择样本和完整数据中因子变量的水平数一致,否则预测会出问题。

2.4、 示例代码(文档中的典型用法)

library(GJRM)# 经典双变量Probit模型(不含平滑项)out<-gjrm(list(y1~x1+x2+x3,y2~x1+x2+x3),data=dataSim,margins=c("probit","probit"),model="B")# 含平滑项的双变量Probitout_s<-gjrm(list(y1~x1+s(x2)+s(x3),y2~x1+s(x2)+s(x3)),data=dataSim,margins=c("probit","probit"),model="B")# 依赖参数也作为协变量函数(含平滑项)eq.mu.1<-y1~x1+s(x2)eq.mu.2<-y2~x1+s(x2)eq.theta<-~x1+s(x2)# θ的公式outD<-gjrm(list(eq.mu.1,eq.mu.2,eq.theta),data=dataSim,margins=c("probit","probit"),model="B")

2.5、 对用户的关键建议

  • 收敛问题处理:若收敛失败,优先尝试uni.fit = TRUE;其次检查模型设定是否合理(边缘分布是否匹配数据、Copula是否选对)。
  • 样本量要求:使用三参数边缘分布(如Weibull)需要更多数据信息。
  • 依赖参数建模:在样本选择或内生性模型中,若将θ作为协变量函数,需有明确的实质理由。