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

使用mlogit拟合随机截距多项logit模型时varying参数报错求助

随机截距多项logit模型数据转换报错解决

问题描述

尝试运行随机截距多项logit模型,使用的数据集如下:

IDResolutionSTATEIndex_1Index_2
6SettledIndiana43.326781649.2
8SettledDelaware72.698053648.5
9DismissedDelaware72.698053648.5
10SettledNew York72.017323448.4
11StayTexas84.809253449.8

其中结果变量为Resolution,Index_1和Index_2嵌套在State中。使用mlogit.data转换数据时,无论设置shape="wide"还是"long",均报错:

Error in guess(varying) : failed to guess time-varying variables from their names

使用的代码:

mlogit_data <- mlogit.data(data, shape = "wide", choice = "_Resolution", varying = 3:5, alt.levels = NULL)

问题原因与解决方法

核心错误点

  1. choice参数名错误:代码中写的"_Resolution"多了下划线,实际数据中的结果变量名为Resolution,导致函数无法定位目标变量。
  2. varying参数误用:varying用于指定不同备选方案对应的变量列,但当前数据是长格式(每行对应一个个体的选择记录),Index_1、Index_2是个体层面属性,并非分备选方案的变量,完全不需要设置这个参数。
  3. shape参数判断错误:原始数据已经是长格式,不需要强行指定shape="wide"。

修正后的代码

步骤1:转换数据格式

# 提取所有备选方案的水平
alt_levels <- unique(data$Resolution)

# 转换为mlogit所需格式
mlogit_data <- mlogit.data(data, 
                           shape = "long", 
                           choice = "Resolution",  # 使用正确的变量名
                           alt.levels = alt_levels,
                           id.var = "ID")  # 指定个体ID变量

步骤2:验证转换结果

执行head(mlogit_data)查看转换后的数据结构,确认是否符合mlogit的要求。

步骤3:拟合随机截距多项logit模型

可以用lme4包的glmer函数实现随机截距模型:

library(lme4)
model <- glmer(Resolution ~ Index_1 + Index_2 + (1 | STATE), 
               data = data,
               family = multinomial(link = "logit"))

额外说明

只有当数据是宽格式(每行对应一个个体,列对应不同备选方案的属性)时,才需要设置shape="wide"并配合varying参数。当前数据属于标准长格式,无需额外指定备选方案变量列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:15:10