ошибка вычислительной сингулярности при использовании символов в R mlogit-package - PullRequest
0 голосов
/ 24 мая 2018

есть несколько связанных вопросов, но я действительно не могу понять из этого.Я новичок в статистике, R, пакет Mlogit, а также в Stockoverflow.Я постараюсь задать свой вопрос как можно точнее.Вот [ссылка на данные]. (https://docs.google.com/spreadsheets/d/1IvN6ZgCgDERu3Mn4AglZMjicoXnFQQHc9GhAhbrpFRI/edit?usp=sharing) У меня есть набор данных из эксперимента с дискретным выбором с зависимой переменной «выбор» с двумя уровнями (да / нет) и 4 независимыми переменными с каждым из 3 уровней.

Я пытаюсь оценить с помощью mlogit, но у меня есть некоторые реальные проблемы, и мой супервизор не может помочь. В моем наборе данных значения для каждой переменной равны 1,2,3 (1 для бренда 1,2 для бренда 2 и т.д ...)

    t1 <- read_csv("~/Dokumente/UvA/Thesis/R/t1.csv")
t1 <- mlogit.data(data=t1, choice="choice",shape="long",alt.levels=paste("pos",1:4),id.var="id")

Чтобы выполнить оценку, я использую следующую функцию:

m1 <- mlogit(choice~ 0 + Brand+ Features+ Valence+ Volume, data=t1)
summary(m1)

и получил такой результат: оценка модели 1 и заметил, что Rstudio интерпретировал мои переменные набора данных как целочисленные. Поскольку переменные представляют собой 3 разных бренда, 3 разных свойства и 3 разные категории валенвы и объема (низкий, средний и высокий), я хотел бы включить оценкиПоэтому я устал загружать их в Rstudio и определял их как символы с помощью этой функции

library(readr)
t1 <- read_csv("~/Dokumente/UvA/Thesis/R/t1.csv", 
col_types = cols(Brand = col_character(), 
    Features = col_character(), Valence = col_character(), 
    Volume = col_character()))

Если я сейчас запускаю ту же функцию mlogit, я получаю сообщение об ошибке:

Error in solve.default(H, g[!fixed]) : system is computationally singular: reciprocal condition number = 3.11303e-18

Когда я использую символы для разных уровней (например, названия брендов вместо 1,2,3, см. Таблицу 2 «t2»), у меня возникает та же проблема сингулярности.а) Имеет ли смысл исход, если я использую числа в первом наборе данных?б) как я могу интегрировать свои значения в качестве символов для оценки уровней атрибутов?

Я надеюсь, что кто-то может мне помочь, потому что я действительно смущен и новичок во всем этом.Я наверняка совершаю очень простую или глупую ошибку.

Приветствия

1 Ответ

0 голосов
/ 24 мая 2018

Есть несколько вопросов.Первая проблема заключается в том, что у вас есть одно значение выбора, помеченное как «10», но вы говорите, что оно должно иметь только два уровня.

library(readxl)
library(dplyr)

t1 <- read_excel("~/Downloads/Data mlogit.xlsx", sheet=1) %>% as.data.frame
t1$choice %>% table

   0    1   10 
2770  925    1 

Предполагая, что он просто ошибочен, вы также не должны запускать многочленный логит, который применяется, только если у вас более двух уровней.Вместо этого вы должны использовать стандартную логистику или подобное.Пример:

# Correct mislabeled sample
t1$choice[t1$choice == 10] <- 1

# Make everything factors
for(i in 1:ncol(t1)) {
  t1[[i]] <- factor(t1[[i]])
}

# Run logistic
library(glmnet)

y <- t1$choice
t1d <- dplyr::select(t1, Brand, Features, Valence, Volume)
t1d <- model.matrix( ~ .-1, t1d)
fit <- glmnet(t1d,y, family="binomial", intercept=F, lambda = 0, alpha=0)
coefficients(fit)

(Intercept)  .        
Brand0      -2.0328103
Brand1      -0.4518273
Brand2      -1.4383109
Brand3      -1.4903840
Features1   -0.5857877
Features2    0.2900501
Features3    0.2717443
Valence1     1.4788752
Valence2    -0.1585652
Valence3    -1.9390001
Volume1     -0.6920187
Volume2     -0.1013821
Volume3      0.7010679

Существует множество способов запустить логистическую регрессию в R, я склонен использовать пакет glmnet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...