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

使用margins函数计算multinom多分类模型边际效应时出现‘jacobian %*% vcov: non-conformable arguments’错误的原因及解决方法

解决margins()计算多分类模型边际效应时的矩阵不匹配错误

这个错误Error in jacobian %*% vcov : non-conformable arguments本质是矩阵乘法维度不匹配导致的,问题出在你调用multinom()的方式上:

nnet包的multinom()函数默认不会计算完整的Hessian矩阵,因此返回的方差协方差矩阵(vcov(test))只包含第一个非参考类别的系数协方差(维度4×4),但margins()计算边际效应时需要对应所有模型系数的完整vcov矩阵(你的模型有2个非参考类别,每个类别4个系数,所以需要8×8的vcov矩阵),两者维度不匹配就触发了这个错误。

解决步骤:

  1. 在训练multinom模型时添加Hess=TRUE参数,强制计算完整的Hessian矩阵,从而生成完整的方差协方差矩阵:
ml <- read.dta("https://stats.idre.ucla.edu/stat/data/hsbdemo.dta")
ml$prog2 <- relevel(ml$prog, ref = "academic")
# 添加Hess=TRUE参数
test <- multinom(prog2 ~ ses + write, data = ml, Hess=TRUE) 
library(margins)
margins(test) # 现在可以正常运行了
  1. 验证一下:运行dim(vcov(test))会返回[1] 8 8,这就是对应所有8个模型系数的完整协方差矩阵,margins()可以正常进行矩阵运算了。

额外说明:

如果你不需要计算边际效应的标准误,也可以在调用margins()时指定vce="none",跳过vcov矩阵的运算,但这会丢失标准误信息,一般不推荐:

margins(test, vce="none")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:29:11