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

调用ordinal包clmm函数报错:无法将closure转为character向量

解决clmm函数报错的方案

先排查函数名冲突

这个报错大概率是因为你的R环境里存在和clmm重名的对象(比如之前误把clmm当成变量赋值过,或者同时加载了多个包含clmm函数的包)。按以下步骤处理:

  • 运行exists("clmm"),如果返回TRUE,说明确实有重名对象,执行rm(clmm)删掉它。
  • 重新加载ordinal包:library(ordinal),然后用包名明确指定调用函数,修改代码为:
ord_gllamm <- ordinal::clmm(formula = classes ~ year  + rate_doctstudents_prof + is_federal  + (1|hei_code),
                            data = df,
                            Hess = TRUE,
                            nAGQ = 10)

这样能彻底避免函数名冲突问题。

再确认数据变量的有效性

虽然你已经检查过变量类型,仍建议做以下关键验证:

  • 确认因变量classes是有序因子:运行is.ordered(df$classes),如果返回FALSE,执行df$classes <- factor(df$classes, ordered = TRUE)转换类型。比例优势模型要求因变量必须是有序分类变量,这是核心前提。
  • 检查分组变量hei_code:确保没有缺失值,运行table(is.na(df$hei_code)),如果有缺失行,执行df <- df[!is.na(df$hei_code), ]删除缺失样本。同时确认hei_code是因子或字符型,若为数值型,转成因子df$hei_code <- factor(df$hei_code)。
  • 检查协变量:运行summary(df[, c("year", "rate_doctstudents_prof", "is_federal")]),确认没有无穷值、极端异常值或者大量缺失值,这些也可能导致模型拟合出错。

最后尝试简化模型调试

如果上面的方法都没用,先简化模型逐步排查:

  • 去掉nAGQ = 10参数,用默认的nAGQ = 1运行模型,看看是否能成功拟合。如果可以,再逐步增加nAGQ的值,排查是不是高维积分导致的问题。
  • 先拟合不带随机效应的模型:ordinal::clmm(classes ~ year + rate_doctstudents_prof + is_federal, data = df, Hess = TRUE),如果成功,再加入随机效应(1|hei_code),定位问题所在。

内容的提问来源于stack exchange,提问作者Or.C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:46:08