当我尝试使用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
我正在尝试使用mlogit包。我首先使用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
我在别处见过的解决方案suggests trying to eliminate the non-invertibility by removing highly correlated variables.但是,这似乎并没有解决我的问题。问题仍然存在,具有不同的确切数字,即使在简单的双变量模型中,例如具有低相关性的示例数据(显然,具有不同的数字)。事实上,它甚至发生在一个回归器中!
我正在尝试做的简化版本:
model<-mlogit(
picked~PPG+Age,
data=Choices)
也许这只是一个容忍问题,但考虑到这些变量并不是特别相关,这将是令人惊讶的。这似乎是比变量相关更微妙的东西是错误的。我也查了一下,providing separated individual/alternative specific variables。例如,添加团队特定的变量(例如“Team_MSA_Size”)不会改变任何内容:
model<-mlogit(
picked~PPG+Age|Team_MSA_Size,
data=Choices)
是否有关于我的数据结构或未能正确使用mlogit语法导致这种情况?我该怎么办呢?
我确实发现了这个similar-seeming topic,但是在没有相关数据的情况下我确实遇到了问题。接受的答案是否表明每个选择必须始终具有相同的确切替代方案?如果是这样,那对我来说是非常不幸的,因为显然每个球队都会看到一个不同的名单,因为球员被选中移除了。如果这就是问题,这里是否有一个简单的解决方法,或者是否将其置于代码自己的估算区域?
如果它有用,我可以愉快地提供更多数据或其他细节。
编辑:有人要求玩具数据。这是一个csv with toy data,以及错误产生代码。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
答案 0 :(得分:0)
如果我使用mlogit pkg中的函数执行条件逻辑回归,根据我的理解适应你的变量:
Choices <- mlogit.data(data=test, choice="picked",
chid.var="team",alt.var="pick",shape="long")
你的alt.var是&#34;选择&#34;它需要订购,唯一,没有联系,所以在你的情况下它看起来像1:6。
除非我误解了你的问题!
如果您创建一个小玩具数据集,以便可以测试代码,那将有所帮助。
你好,
你的语法是:
mlogit(拾取〜as.factor(位置)+ as.factor(黑色)+年龄+ PPG + APG + RPG + Team_WS, 数据= Choices_test)
来自mlogit pkg,我看了一段时间,但它看起来不像我用于条件逻辑回归的语法。
计算奇异性错误msg与我的经验中的高度相关/相同的变量有关。
如果您确定几乎没有共线性,那么我的猜测是您的模型语法设置不正确。
PS:您的代码抛出:
在档案中(文件,&#34; rt&#34;): 无法打开文件&#39; toy_data.csv&#39;:没有这样的文件或目录
我认为你需要填写“toy_data.csv&#39;有一些数据行。如果您的数据是敏感的,那么只需发明一些(足以证明问题)。