Попытка оценить масштабную полиномиальную логит-модель в R с использованием пакета gmnl.

Я новичок в R и пытаюсь оценить модель дискретного выбора на основе своих данных. Я застрял в процессе оценки моей модели и был бы признателен за вашу помощь.

Я использую пакет «gmnl» для оценки S-MNL (масштабный полиномиальный логит). Существует четыре вида транспорта в качестве альтернатив, а специфичными для альтернатив переменными являются «плата за проезд» и «время». Индивидуальными переменными являются доход и пол (обе они входят в модель как фиктивные переменные и переменные дохода, определяемые как доход 6 доходных групп).

Я начал с оценки S-MNL, где константы, специфичные для альтернативы, фиксированы и не масштабируются, что было сведено.

 > smnl<- gmnl(choice~time+toll |1, data=u, model="smnl", R=100, notscale=c(1,1,1,0,0)) 
 > summary(smnl) 

Затем я позволил шкале различаться для разных людей в соответствии с их доходом (в пятой части «формулы» я указал, что в шкалу включен переменный доход, а не постоянный).

> smnl.het<-gmnl (choice ~ time + toll | 1 | 0 | 0 | Income1 +Income2 + Income3 + Income4 +  Income5 + Income6 -1 , data=u, model="smnl", R=100, notscale= c (1,1,1, rep(0,2)))
> Summary (smnl.het)

Но я получил следующую ошибку:

Ошибка в H[i, , drop = FALSE]: нижний индекс выходит за пределы

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

options(error=recover)
smnl.het<-gmnl (choice ~ time + toll | 1 | 0 | 0 | Income1 +Income2 + Income3 + Income4 +  Income5 + Income6-1 , data=u, model="smnl", R=100, notscale= c (1,1,1, rep(0,2)))

Enter a frame number, or 0 to exit   

1: gmnl(choice ~ time + toll | 1 | 0 | 0 | Income - 1, data = u, model = "smnl", R
2: eval(opt, sys.frame(which = nframe))
3: eval(expr, envir, enclos)
4: maxLik(method = "bfgs", start = c(-0.948352323447934, -2.54330549099491, -4.394
5: maxRoutine(fn = logLik, grad = grad, hess = hess, start = start, constraints = 
6: maxOptim(fn = fn, grad = grad, hess = hess, start = start, method = "BFGS", fix
7: callWithoutSumt(start, "logLikFunc", fnOrig = fn, gradOrig = grad, hessOrig = h
8: callWithoutArgs(theta, fName = fName, args = names(formals(sumt)), ...)
9: eval(f, sys.frame(sys.parent()))
10: eval(expr, envir, enclos)
11: logLikFunc(theta, fnOrig = ..1, gradOrig = ..2, hessOrig = ..3, X = ..4, y = ..
12: fnOrig(theta, ...)
13: drop(tcrossprod(H[i, , drop = FALSE], t(delta)))
14: tcrossprod(H[i, , drop = FALSE], t(delta))

Selection: 13
Called from: top level 
Browse[1]> ls()
[1] "x"
Browse[1]> x

Ошибка во время завершения: обещание уже находится на стадии оценки: рекурсивная ссылка на аргумент по умолчанию или более ранние проблемы?

Selection: 14
Called from: top level 
Browse[1]> ls()
[1] "x" "y"
Browse[1]> x

Ошибка во время завершения: обещание уже находится на стадии оценки: рекурсивная ссылка на аргумент по умолчанию или более ранние проблемы?

Browse[1]> y

     het.Income2 het.Income3 het.Income4 het.Income5 het.Income6
[1,]           0           0           0           0           0

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


person maryam    schedule 27.07.2015    source источник


Ответы (1)


Похоже, вы неправильно набрали команду для notscale

smnl.het<-gmnl(choice ~ time + toll | 1 | 0 | 0 | Income1 +Income2 + Income3 + Income4 +  Income5 + Income6 -1 , data=u, model="smnl", R=100, notscale= c (1,1,1, rep(0,2)))
Summary (smnl.het)

Я бы подумал, что это выглядит примерно так: smnl.het‹-gmnl(choice ~ time + toll | 1 | 0 | 0 | Income1 - 1 , data=u, model="smnl", R=100, notscale=c (1,1,1,0,0) )

Вы пробовали более узкий набор команд, такой как выше?

person andrew21    schedule 26.01.2016