You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用似然法提取svyglm风险差异置信区间时遇系数有效性错误

问题:带恒等链接的加权二项GLM似然法置信区间报错

我尝试用带恒等链接(identity link)的二项族GLM拟合调查加权数据以计算风险差异,已通过提供初始值成功运行svyglm模型,但使用似然法提取不对称置信区间时,收到错误提示:

Error: no valid set of coefficients has been found: please supply starting values

样本数据(前30条)

data <- structure(list(binary_outcome= structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("0", "1"), class = "factor"), 
    binary_exposure= structure(c(1L, 1L, NA, 1L, 1L, NA, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, NA, 1L, NA, 1L, 
    NA, NA, NA, NA, 1L, NA, 2L, NA), .Label = c("1", "2"), label = "binary exposure", class = "factor"), 
    wt = c(191217, 89001, 16578, 188901, 7787, 7787, 3876, 
    27569, 7208, 7208, 8594, 170173, 3430, 7208, 53034, 53034, 
    5037, 5037, 786465, 177210, 7849, 9038, 6353, 3837, 89733, 
    188973, 176366, 188736, 3456, 27478), block = c("a", 
    "a", "b", "c", "w", "e", 
    "j", "c", "g", "r", "j", 
    "r", "v", "f", "g", "d", 
    "a", "a", "v", "t", "l", 
    "q", "d", "n", 
    "m", "b", "g", "k", "m", 
    "g"), strata_study = c("C R", "K U", 
    "TN R", "WB R", "K R", "K R", 
    "TN U", "WB U", "TN U", "TN U", 
    "O U", "M U", "K U", "TN U", 
    "WB U", "WB U", "K R", "K R", 
    "D U", "WB R", "TN U", "TN U", 
    "TN U", "K U", "D U", "WB R", "C R", 
    "WB R", "K U", "WB U")), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -30L), groups = structure(list(
    binary_outcome = structure(1:2, .Label = c("0", "1"), class = "factor"), 
    .rows = structure(list(1:15, 16:30), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE))

拟合模型代码

svy_design <- svydesign(ids = ~block, strata = ~strata_study, weights = ~wt, data = data, nest = TRUE, fpc = NULL)

summary(svyglm(I(binary_outcome==1)~binary_exposure, design=svy_design,
               family=quasi(link="identity",variance="mu(1-mu)"),  
               start=c(0.1,0.6)))

模型运行结果

Call:
svyglm(formula = I(binary_outcome == 1) ~ binary_exposure, design = svy_design, 
    family = quasi(link = "identity", variance = "mu(1-mu)"), 
    start = c(0.1, 0.1))

Survey design:
svydesign(ids = ~block, strata = ~strata_study, weights = ~wt, 
    data = data, nest = TRUE, fpc = NULL)

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)  
(Intercept)        0.3575     0.2043   1.750   0.1107  
binary_exposure2   0.6425     0.2043   3.145   0.0104 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for quasi family taken to be 0.7467369)

Number of Fisher Scoring iterations: 2

出错的置信区间调用代码

confint(svyglm(I(binary_outcome==1)~binary_exposure, design=svy_design,
               family=quasi(link="identity",variance="mu(1-mu)"),  
               start=c(0.1,0.6)), method="likelihood")

解决方案

报错原因是confint()在内部重新拟合模型时,没有继承你传入的初始值参数。解决方式是先将拟合好的模型保存为对象,再对该对象调用confint():

# 先拟合模型并保存
fit <- svyglm(I(binary_outcome==1)~binary_exposure, design=svy_design,
              family=quasi(link="identity",variance="mu(1-mu)"),  
              start=c(0.1,0.6))

# 对已拟合完成的模型调用似然法置信区间
confint(fit, method="likelihood")

另外需要注意:恒等链接的二项模型本身容易出现拟合不稳定(预测值可能超出[0,1]范围),初始值的选择对收敛至关重要,你当前使用的初始值已经能让模型收敛,复用该初始值即可确保confint内部的拟合过程顺利完成。

内容的提问来源于stack exchange,提问作者s.stats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:07:03