【问题标题】:Persistent Computational Singularity in mlogitmlogit 中的持久计算奇点
【发布时间】:2017-08-14 04:06:27
【问题描述】:

在尝试使用 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

【问题讨论】:

  • 这似乎更适合交叉验证,因为它可能是统计问题而不是编程问题
  • 根据我的经验,这是由于组内某些变量在充分条件下失去变化的结果——您是否尝试一次添加一个变量以查看它何时中断?如果可以的话,更详细地探索这个变量的分组变化。
  • @MichaelChirico 如果我正确理解你的问题,是的,我已经调查过了。即使我只包含一个右侧变量,问题仍然存在。这个变量是什么似乎并不重要。错误的普遍性让我认为这是关于数据格式/我使用 mlogit 语法而不是原始数据的原因。
  • 看起来您有很多重复的条目。这不会使您倾向于奇异 X 矩阵吗?
  • 我认为问题在于您的选择都是唯一的,因此只能选择一次,因此因变量的每个级别只有一个 1。当您有一组选择时,多项式 logit 是合适的,每个选择在不同的条件下被多次选择。

标签: r mlogit


【解决方案1】:

如果我使用 mlogit pkg 中的函数执行条件逻辑回归,根据我的理解适应您的变量:

 Choices <- mlogit.data(data=test, choice="picked",
          chid.var="team",alt.var="pick",shape="long")

您的 alt.var 是“pick”,需要订购,唯一,没有关系,所以在您的情况下,它看起来像 1:6。

除非我误解了你的问题!

如果您创建一个小型玩具数据集以便测试代码,这将有所帮助。

你好,

你的语法是:

mlogit(picked~as.factor(Position)+as.factor(Black)+Age+PPG+APG+RPG+Team_WS,
     data=Choices_test)

来自 mlogit pkg,我已经有一段时间没有看了,但它看起来不像我用于条件逻辑回归的语法。

根据我的经验,计算奇点错误消息与高度相关/相同的变量有关。

如果您确定几乎没有共线性,那么我的猜测是您的模型语法设置不正确。

PS:你的代码抛出:

In file(file, "rt") :
  cannot open file 'toy_data.csv': No such file or directory

我认为您需要用一些数据行填充“toy_data.csv”。如果您的数据很敏感,那么只需发明一些(足以证明问题)。

【讨论】:

  • 我的理解是,根据文档,这应该无关紧要 - 选秀号码和球员姓名都相当于相同的唯一标签“替代品”。由于每个球员代表一个球队假设可以选择的选择,他们构成了替代方案。相反,使用选秀权相当于简单的重新标记,因为每个选秀权号码都与唯一的球员相关联。有什么不对吗?
  • 另外,如果我尝试切换它,它不会改变我收到的错误消息,但它会稍微改变确切的倒数条件数。这似乎表明我认为两者相等是错误的。
猜你喜欢
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多