如何从clmm对象获取模型矩阵?运行示例遇报错求解
解决clmm模型报错与获取模型矩阵的问题
一、解决Error in eval(predvars, data, env) : object 'SURENESS' not found报错
这个报错的核心原因是你没有加载示例所需的solder数据集,SURENESS是该数据集中的有序响应变量,直接运行建模代码会找不到这个变量。请按照以下步骤操作:
- 先加载
ordinal包(clmm是这个包中的函数):library(ordinal) - 加载内置的
solder数据集:data(solder) - 再运行示例的建模代码:
mod1 <- clmm(SURENESS ~ Opening + Solder + Mask + PadType + (1|Operator), data = solder)
这样就能成功拟合模型,不会再出现找不到SURENESS的错误。
二、获取clmm模型的模型矩阵
和lm/glm不同,clmm对象默认不会自动存储完整的模型矩阵,但有两种简单的方法可以获取:
方法1:使用ordinal包的专属model.matrix方法
ordinal包为clmm对象提供了专门的model.matrix方法,直接传入拟合好的模型对象即可:
# 生成模型矩阵 model_mat <- model.matrix(mod1) # 查看前几行 head(model_mat)
方法2:先保留数据到模型对象,再手动生成
如果你希望模型对象中保留原始数据,可以在建模时设置keep.data = TRUE参数(这是clmm的专属参数,而非通用的model=TRUE):
# 拟合模型时保留数据 mod1 <- clmm(SURENESS ~ Opening + Solder + Mask + PadType + (1|Operator), data = solder, keep.data = TRUE) # 从模型对象中提取数据,再生成模型矩阵 model_mat <- model.matrix(terms(mod1), data = mod1$data)
这样就能得到你需要的模型矩阵了。
内容的提问来源于stack exchange,提问作者Qaswed
相关产品推荐
相关产品推荐

