Моя проблема связана с постоянной вычислительной сингулярностью при попытке использовать пакет 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
Очевидно, у меня намного больше игроков и переменных, но это основная структура.
Затем я пытаюсь запустить условную логит-регрессию:
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