R语言mlogit混合logit模型coef函数调用异常问题咨询
mlogit混合logit模型系数提取问题解析
问题根源:语法错误
你遇到的所有问题,核心是系数提取的语法写错了:
错误写法:coef(modelQ2_1["sd.cl"])
正确写法:coef(modelQ2_1)["sd.cl"]
你把索引["sd.cl"]放在了模型对象modelQ2_1上,而不是coef()返回的系数向量上,导致传递给pnorm()的根本不是数值系数,而是一个空的模型切片,这才引发了一系列异常。
逐个现象解释
报错“Non-numeric argument to mathematical function”
modelQ2_1["sd.cl"]会尝试从模型对象中提取名为"sd.cl"的元素,但模型对象本身没有这个元素,返回的是空对象。把这个非数值的空对象传给pnorm()的sd参数,就触发了类型错误。as.numeric()转换后返回numeric(0)
因为coef(modelQ2_1["sd.cl"])处理的是空模型对象,提取到的系数也是空的,转成数值自然就是长度为0的向量numeric(0)。直接访问
modelQ2_1$coefficients正常运行modelQ2_1$coefficients是直接访问模型对象内置的系数列表,通过["cl"]和["sd.cl"]能正确定位到对应的数值系数,所以pnorm()能正常计算。
修正后的代码示例
用正确的系数提取方式即可解决问题:
# 正确提取系数并传入pnorm pnorm(0, mean = coef(modelQ2_1)["cl"], sd = coef(modelQ2_1)["sd.cl"])
两种系数提取方式的区别
coef(model):返回模型的系数向量(带名称的数值向量),需要先调用coef()拿到向量,再用索引取值;model$coefficients:直接访问模型对象内部存储的系数列表,本质是一个命名数值向量,和coef(model)返回的内容完全一致,只是访问路径不同。
内容的提问来源于stack exchange,提问作者Alex Chua
相关产品推荐
相关产品推荐

