从报错到成功:巢式Logit模型拟合实战经验分享(一)

        最近,用NLogit软件拟合多层巢式Logit模型时遇到了一些报错问题。尽管在论坛和贴吧上寻求了帮助,但未能找到有效的解决方案。具体报错信息如下:

        Error   1026: Singular VC may mean model is unidentified. Check tree.

        Error   1027: Models - estimated variance matrix of estimates is singular.

        Error   1027: Models - estimated variance matrix of estimates is singular.

        经过查阅NLOGIT使用手册,我发现错误1027实际上只是一个警告,而错误1026提示模型未被识别,需要检查树结构。我起初认为是树结构定义有问题,但经过仔细检查,发现树的定义并无错误。最终,我仔细查阅手册,发现问题的根源在于模型中的待拟合常数项数量超过了N(选择项数量)-1个,导致了模型出现过拟合。例如:当有5个出行方案时,对应的5个效用函数中应包含4个常数项。因为有一个选择项被作为参照项,其效用函数的常数项默认设为0。另外,在多层巢式Logit模型中,各选择肢的层与层之间存在一个IV(包容值),也是待估计的常数项,这就可能导致待拟合的常数项数量>5个。

        在拟合巢式Logit模型时,一般要求效用函数中待拟合的常数项数量应≤N-1个。但经过我测试表明,待拟合常数项数量≤N个亦可行。以下是一个三层巢式结构的具体例子:

        在这个结构中,

        第1层与第2层共有3个IV,分别为λ_F1、λ_F2和λ_F3。

        第2层与第3层共有2个IV,分别为λ_Q1和λ_Q2。

        假设选项A作为参照项,其常数项默认为0,其余选项BCDE的效用函数各有一个常数项。这样总共有9个待估计的常数项:λ_F1、λ_F2、λ_F3、λ_Q1、λ_Q2、λ_ConstB、λ_ConstC、λ_ConstD、λ_ConstE。直接用NLogit拟合模型会报错,需要手动设置某些包容值,确保待拟合的常数项数量不超过5个。

        在这个例子中,选择肢Q1-F1-AF2-BW-Q2只有一个选项,在巢式Logit模型中这种选择肢被视为退化肢,通常这种选择肢层与层之间的包容值一般默认为1。因此,将包容值λ_Q1λ_Q2​λ_F1和λ_F2​均设为1。此时剩5个待估计常数项,满足待拟合常数项的数量不超过选择项数量N的要求,再去执行拟合就可成功了。具体设置包容值的语法如下:

        ; Ivset:(Q1,Q2)=[1]/(F1,F2)=[1]

        这样设置后就不会出现上述错误了。具体巢式Logit的拟合操作将在后续继续分享。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值