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

使用segmented包中davies.test与segmented.default遇api00未找到错误求助

解决segmented包处理svyglm时的"object 'api00' not found"错误

错误原因

你遇到的问题源于segmented.default无法正确处理svyglm模型的环境关联,导致评估预测变量时找不到原始数据中的api00变量;同时用字符串定义的目标函数fn.obj在评估时也容易出现环境匹配问题。

修复方案

1. 改用segmented()而非segmented.default()

segmented()函数会根据输入模型的类型自动调用适配方法,能正确处理svyglm的环境和数据关联,避免变量找不到的问题。

2. 用函数形式定义目标函数

相比字符串,函数形式的fn.obj能在正确的环境中评估,直接访问模型的组件,无需依赖全局环境变量。

修改后的完整代码

library(segmented)
library(survey)
data(api)
dstrat <- svydesign(id=~1, strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)

o <- svyglm(api00~ell, design=dstrat)

# 用函数形式定义目标函数,避免字符串评估的环境问题
fn.x <- function(x) {
  as.numeric(svyvar(resid(x, "pearson"), x$survey.design, na.rm = TRUE))
}

# 使用segmented()自动适配svyglm对象
os <- segmented(o, ~ell, control=seg.control(fn.obj=fn.x, display=TRUE))
slope(os)
davies.test(os, ~ell)

额外排查点

如果仍有问题,可以在segmented()调用中显式指定原始数据,确保函数能访问到所有变量:

os <- segmented(o, ~ell, data = apistrat, control=seg.control(fn.obj=fn.x, display=TRUE))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:41:05