在尝试使用 mlogit 包时,我的问题与持久计算奇点有关。
首先,稍微介绍一下我的数据:
我的数据涉及在体育选秀的背景下预测选择。每支球队从同一个球员池中进行有序选择,具有球队和球员的属性。因此,在 mlogit 的语言中,每个“团队”都是一个个体,每个“玩家”都是一个替代品。举一个过于简单的例子,假设五支球队各选择一名球员。
Pick Player PPG Age Team
1 Ben Simmons 19.2 19 PHI
2 Brandon Ingram 17.3 18 PHI
3 Jaylen Brown 14.6 19 PHI
5 Kris Dunn 16.4 21 PHI
6 Buddy Hield 25.0 22 PHI
我正在尝试使用 mlgit 包。我首先使用 mlogit.data 重新格式化我的数据。
Choices <- mlogit.data(test,
choice="picked",
shape="long",
id.var="Team",
alt.var="Player",
chid.var="Team",
varying=c(4:5))
结果看起来像:
picked Pick Player PPG Age Team
PHI.Ben Simmons TRUE 1 Ben Simmons 19.2 19 PHI
PHI.Brandon Ingram FALSE 2 Brandon Ingram 17.3 18 PHI
PHI.Jaylen Brown FALSE 3 Jaylen Brown 14.6 19 PHI
PHI.Kris Dunn FALSE 5 Kris Dunn 16.4 21 PHI
PHI.Buddy Hield FALSE 6 Buddy Hield 25.0 22 PHI
LAL.Brandon Ingram TRUE 2 Brandon Ingram 17.3 18 LAL
LAL.Jaylen Brown FALSE 3 Jaylen Brown 14.6 19 LAL
LAL.Kris Dunn FALSE 5 Kris Dunn 16.4 21 LAL
LAL.Buddy Hield FALSE 6 Buddy Hield 25.0 22 LAL
BOS.Jaylen Brown TRUE 3 Jaylen Brown 14.6 19 BOS
BOS.Kris Dunn FALSE 5 Kris Dunn 16.4 21 BOS
BOS.Buddy Hield FALSE 6 Buddy Hield 25.0 22 BOS
MIN.Kris Dunn TRUE 5 Kris Dunn 16.4 21 MIN
MIN.Buddy Hield FALSE 6 Buddy Hield 25.0 22 MIN
NOP.Buddy Hield TRUE 6 Buddy Hield 25.0 22 NOP
显然,我有更多的球员和变量,但这是基本结构。
然后我尝试运行条件 logit 回归:
mlogit(Choices,picked ~ <regvar>,data=Choices)
我反复遇到以下错误:
Error in solve.default(H, g[!fixed]) :
system is computationally singular: reciprocal condition number = 3.72907e-23
我在其他地方看到的一个解决方案建议尝试通过删除高度相关的变量来消除不可逆性。但是,这似乎并不能解决我的问题。即使在简单的二变量模型中,例如具有低相关性的示例数据(显然,具有不同的数字),该问题仍然存在,具有不同的确切数字。事实上,它甚至发生在单个回归器中!
我正在尝试做的简化版本:
model<-mlogit(
picked~PPG+Age,
data=Choices)
也许这只是一个容忍问题,但鉴于这些变量并不是特别相关,这将是令人惊讶的。这似乎是比变量相关性更微妙的东西是错误的。我还检查并提供了单独的个人/替代特定变量。例如,添加特定于团队的变量(例如“Team_MSA_Size”)不会改变任何内容:
model<-mlogit(
picked~PPG+Age|Team_MSA_Size,
data=Choices)
我的数据结构是否有问题,或者没有正确使用 mlogit 语法会导致这种情况?我将如何解决它?
我确实找到了这个看似相似的主题,但在没有相关数据的情况下,我确实很难遵循它。接受的答案是否表明每个选择必须始终具有相同的确切选择?如果是这样,那对我来说将是非常不幸的,因为显然每支球队都会看到不同的名单,因为球员被选拔了。如果这是问题所在,这里是否有一个简单的解决方案,或者是否将其置于您自己的代码估算器领域?
如果有帮助,我很乐意提供更多数据或其他详细信息。
编辑:有人要求提供玩具数据。这是一个带有玩具数据的 csv,下面是产生错误的代码。
setwd("Filepath")
library(mlogit)
toy_data <- read.csv("toy_data.csv",header = TRUE)
Choices_test<- mlogit.data(toy_data,
choice="picked",
shape="long",
id.var="Team",
alt.var="Pick",
chid.var="Team")
mlogit(picked~as.factor(Position)+as.factor(Black)+Age+PPG+APG+RPG+Team_WS,
data=Choices_test)
Error in solve.default(H, g[!fixed]) :
system is computationally singular: reciprocal condition number = 6.53305e-21