我的问题与尝试使用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我在其他地方看到的解决方案,建议通过删除高度相关的变量来消除非可逆性。,但是,这似乎解决不了我的问题。这个问题仍然存在,有着不同的确切数字,甚至在简单的双变量模型中,比如低相关性的示例数据(显然,有不同的数字)。事实上,它甚至发生在一个回归者!
我想要做的事情的简化版本:
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发布于 2017-08-15 02:32:56
如果我使用mlogit pkg的函数进行了条件logistic回归,并根据我的理解对您的变量进行了调整:
Choices <- mlogit.data(data=test, choice="picked",
chid.var="team",alt.var="pick",shape="long")你的alt.var是“挑选”,它需要排序,唯一,没有联系,所以在你的情况下,它看起来像1:6。
除非我误解了你的问题!
如果您创建一个小型玩具数据集,以便可以测试代码,那么它将有所帮助。
又是嗨,
是您的语法:
mlogit(picked~as.factor(Position)+as.factor(Black)+Age+PPG+APG+RPG+Team_WS,
data=Choices_test)从mlogit pkg来看,我已经有一段时间没有看过了,但它不像我用于条件逻辑回归的语法。
在我的经验中,计算奇异性误差msg与高度相关/相同的变量有关。
如果您确定有很少的共线性,那么我的猜测是您的模型语法设置不正确。
PS:您的代码抛出:
In file(file, "rt") :
cannot open file 'toy_data.csv': No such file or directory我认为您需要用几行数据填充“toy_data.csv”。如果您的数据是敏感的,那么只需发明一些(足以说明问题)。
https://stackoverflow.com/questions/45667319
复制相似问题