如何对ERGM模型开展敏感性分析:评估未观测混杂变量强度
首先明确:tipr包主要为传统回归模型(线性、logistic等)设计,用于计算E-value评估未观测混杂的影响,但不适用于ERGM——因为ERGM是基于网络结构的条件概率模型,参数解释和混杂变量的作用方式与传统回归存在本质差异。我们可以参考审稿人指定论文的核心思路(E-value方法),通过模拟适配ERGM的敏感性分析。
核心思路
针对ERGM,我们需要量化:未观测混杂变量(节点层面或 dyad层面均可)需要同时与absdiff("wealth")(自变量)和网络联结状态(因变量)达到多大的关联强度,才能抵消absdiff("wealth")的显著效应。具体分为两步:提取现有模型参数、模拟混杂变量的影响。
步骤1:提取ERGM模型关键参数
先从你拟合的ERGM中提取absdiff("wealth")的系数及标准误,这是后续分析的基础:
library(statnet) data(flo) flomarriage <- network(flo,directed=FALSE) flomarriage %v% "wealth" <- c(10,36,27,146,55,44,20,8,42,103,48,49,10,48,32,3) # 拟合原模型 gest <- ergm(flomarriage ~ edges + absdiff("wealth")) summary(gest) # 提取absdiff(wealth)的系数和标准误 coef_wealth <- coef(gest)["absdiff(wealth)"] se_wealth <- summary(gest)$coefficients["absdiff(wealth)", "Std. Error"]
步骤2:模拟未观测混杂变量的影响
我们通过生成与absdiff("wealth")相关的虚拟混杂变量,逐步调整其与网络联结的关联强度,直到absdiff("wealth")的系数不再显著(p>0.05),此时的混杂强度即为审稿人要求的临界值:
# 生成dyad层面的数据集,包含财富差异信息 dyad_data <- as.data.frame(flomarriage, attrname = "wealth") dyad_data$absdiff_wealth <- abs(dyad_data$wealth - dyad_data$wealth.1) # 模拟混杂变量U:与absdiff_wealth线性相关,调整关联强度rho set.seed(123) # 保证可复现 rho <- 0.5 # 初始关联强度,可逐步增大 dyad_data$U <- rnorm(nrow(dyad_data), mean = rho * dyad_data$absdiff_wealth, sd = 1) # 将U作为dyad属性加入网络 flomarriage %e% "U" <- dyad_data$U # 加入U后的ERGM模型 gest_sens <- ergm(flomarriage ~ edges + absdiff("wealth") + edgecov("U")) summary(gest_sens) # 重复调整rho(比如0.6、0.7...),直到absdiff(wealth)的p值>0.05 # 记录此时的rho和edgecov(U)的系数,即为混杂变量所需的最小强度
结果解读
当模拟的混杂变量U与absdiff_wealth的关联强度(rho)及与网络联结的系数达到某个临界值时,absdiff("wealth")的效应不再显著。这个临界值就是未观测混杂变量需要达到的最小强度——只有当真实存在的未观测混杂达到或超过该强度时,才会抵消你原模型中财富差异的效应。
替代方法:基于E-value的近似计算
若想直接参考审稿人指定论文的E-value方法,可将ERGM的absdiff("wealth")系数转换为风险比(RR),再用E-value公式计算:
# 将log-odds系数转换为风险比(RR) rr_wealth <- exp(coef_wealth) # 计算E-value(参考指定论文的公式) e_value <- sqrt(rr_wealth) + sqrt(rr_wealth * (rr_wealth - 1)) cat("近似E-value:", e_value, "\n")
E-value的含义是:未观测混杂变量需要同时与自变量和因变量达到至少e_value倍的关联强度,才能抵消当前自变量的效应。
内容的提问来源于stack exchange,提问作者Christophe Lesschaeve

