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

使用ordinal包拟合clmm多层有序logit模型时遇NA参数错误

解决clmm模型中region:country1的NA/NaN错误

针对你用ordinal包拟合多层有序logit模型时遇到的Error in region:country1 : NA/NaN argument错误,整理了几个排查和解决方向:

1. 检查嵌套分组的完整性

你已经删除了country1和region的NA,但可能存在某个地区不属于任何国家,或者同一国家下的地区有异常编码。可以运行以下代码排查:

# 确认所有非NA的region都对应非NA的country1
table(is.na(data$country1[!is.na(data$region)]))
# 查看每个国家对应的地区分布
table(data$country1, data$region)

如果发现有region未对应country1,需要清理这类数据;要是某国家下只有单个地区,clmm的嵌套随机效应可能无法估计,建议合并或删除这类分组。

2. 确保分组变量是因子类型

country1和region必须是**因子(factor)**类型,不能是字符或数值型——数值型分组变量容易让clmm识别出错。转成因子后记得清理空水平:

data$country1 <- droplevels(as.factor(data$country1))
data$region <- droplevels(as.factor(data$region))

3. 统一清理NA并调整模型参数

你手动删除了country1和region的NA,但na.action = na.omit会检查所有变量的NA,可能反而引入问题。不如先一次性清理所有含NA的行,再去掉这个参数:

# 清理所有含NA的观测
data <- na.omit(data)
# 重新拟合模型
model1 <- clmm(happiness ~ age + gender + class + (1 | country1 / region),
               data = data)

4. 简化模型定位问题

先从简单模型开始测试,确认基础模型没问题再添加嵌套结构:

# 先拟合只有国家水平随机效应的模型
model_test <- clmm(happiness ~ age + gender + class + (1 | country1),
                   data = data)
# 再尝试添加地区水平的随机效应(非嵌套写法)
model_test2 <- clmm(happiness ~ age + gender + class + (1 | country1) + (1 | region),
                   data = data)

如果这两个模型都能正常运行,再尝试嵌套写法(1 | country1/region),这样能快速定位是嵌套结构的问题还是其他变量的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:55:16