Нечетные ошибки при использовании партийного пакета "нельзя применять контрасты ...." и "объект типа замыкания ...." - PullRequest
3 голосов
/ 12 февраля 2012

Я использую пакет party.

Когда я бегу:

tree1 <- mob(incarcerated~priors+opens+concrearr+postrearr+anyrearr+postconvfel+postconvmis+
     ag_vfo+ag_cla2+in_custody |PRIOR_FELONY_ARREST ,
             data = jamaal, 
             control = ctrl, 
             model = glinearModel, 
             family = binomial)

Я получаю ошибку

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :   
contrasts can be applied only to factors with 2 or more levels

Но я проверил, и каждая факторная переменная имеет как минимум 2 уровня.

Затем я попробовал гораздо более простое дерево

treetest <- mob(incarcerated~priors|in_custody, 
                data = jamaal, 
                control = ctrl,
                model = glinearModel, 
                family = binomial)   

и получил одно из печально известных сообщений об ошибках R

Error: object of type 'closure' is not subsettable

Любая помощь приветствуется

UPDATE Я нашел источник первой ошибки (это была проблема с тем, как я использовал фактор ()), но не вторая. Кроме того, rpart работает с теми же данными без проблем.

Данные являются конфиденциальными, но я уточню у клиента, будет ли приемлемым размещение небольшого подмножества

ДОПОЛНИТЕЛЬНОЕ ОБНОВЛЕНИЕ Вот небольшой пример с составленными данными:

priors <- c(rep('Y', 5), rep('N', 5))
incarcerated <- rep(c('Y', 'N'), 5)
in_custody <- rep(c(rep('Y', 3), rep('N', 2)),2)
testdata <- data.frame(cbind(priors, incarcerated, in_custody))
treetest <- mob(incarcerated~priors|in_custody, data = testdata, 
   model = glinearModel, family = binomial)  

выдает ту же ошибку.

1 Ответ

3 голосов
/ 12 февраля 2012

party ищет результаты вызова binomial(), а не функцию binomial или строку "binomial". (По моему мнению, функция glm() в базе R привела к путанице, приняв любой из этих трех вариантов как приемлемый.)

priors <- c(rep('Y', 5), rep('N', 5))
incarcerated <- rep(c('Y', 'N'), 5)
in_custody <- rep(c(rep('Y', 3), rep('N', 2)),2)
testdata <- data.frame(cbind(priors, incarcerated, in_custody))

library(party)
treetest <- mob(incarcerated~priors|in_custody, data = testdata,
                model = glinearModel, family = binomial())

Оглядываясь назад, это сообщение об ошибке, по крайней мере, несколько информативно - оно говорит нам, чтобы искать функцию, которую передают куда-то, где R ожидает объект, который имеет элементы, которые можно извлечь ...

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