Как предсказать модели случайных и фиксированных эффектов?

Я только недавно сделал переход с STATA на R, и у меня возникли проблемы с реализацией R-эквивалента команд STATA xtlogit,fe or reа также predict, Могу ли я попросить некоторой помощи отрегулировать следующий сценарий:

  data <- read.table("http://people.stern.nyu.edu/wgreene/Econometrics/healthcare.csv",header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)

   require(caret) # for confusionMatrix

   #### subset into test & train according to the panel nature (split  individuals rather then observations)
   nID <- length(unique(data$id))
   p = 0.50# partition

   inTrain <- sample(unique(data$id), round(nID * p), replace=FALSE)

   training <- data[data$id %in% inTrain, ] 

   testing <- data[!data$id %in% inTrain, ] 


   pooled <- glm(WORKING~WHITEC+FEMALE+BLUEC+HHNINC+AGE+AGESQ+EDUC+DOCVIS,data=training, family=binomial(link="logit"))

   prediction.working= round(predict(pooled,newdata=testing,type="response"))

   confusionMatrix(prediction.working,testing$WORKING) # Accuracy between both

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

   library(glmmML)
   RE <- glmmML(WORKING~WHITEC+FEMALE+BLUEC+HHNINC+AGE+AGESQ+EDUC+DOCVIS, family=binomial(link="logit"), data=training, cluster=id, method="ghq", n.points=12)



    prediction.working= round(predict(RE,newdata=testing,type="response"))

Но это не похоже на работу. Могу ли я спросить, как настроить glmмодель относительно случайных эффектов и фиксированных эффектов, чтобы использовать predictфункция.

1 ответ

Добро пожаловать в R. Я также STATA новообращенный.

Это сложная проблема, но ее ответ необходимо понять. Чтобы понять, почему predict функция не работает для glmmML, вам необходимо понимать методы S3 (см. http://adv-r.had.co.nz/OO-essentials.html).

Позвольте мне объяснить немного. R является объектно-ориентированным языком. Это означает, что все в R является объектом (то есть вектор, функция, data.frame). Каждый объект содержит атрибуты. Атрибут - это, по сути, метаданные о самом объекте. Например, имена переменных в data.frame являются атрибутами. Один атрибут, который есть у всех объектов - это класс. Чтобы увидеть класс любого объекта, просто вызовите class() функция.

Многие, но не все функции используют методы S3. predict Функция является одной из этих функций. Это значит, когда вы звоните predict, predict Функция смотрит на класс объекта. Затем в зависимости от класса выбирает, какую другую функцию прогнозирования следует использовать. Например, если ваш объект является классом lm, функция прогнозирования будет вызывать predict.lm функция. Другой predict функции включают в себя: predict.glm для объектов glm учебный класс, predict.loess для объектов loess учебный класс, predict.nls для объектов nls класс и т. д. (чтобы увидеть полный список прочитайте predict Помогите). К сожалению нет predict.glmmML функция существует. Следовательно, когда вы звоните predict функция на объекте класса glmmML Вы получаете ошибку.

id <- factor(rep(1:20, rep(5, 20)))
y <- rbinom(100, prob = rep(runif(20), rep(5, 20)), size = 1)
x <- rnorm(100)
dat <- data.frame(y = y, x = x, id = id)
fit.2 <- glmmML(y ~ x, data = dat, cluster = id)
predict(fit.2)
Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "glmmML"
class(fit.2)
 [1] "glmmML"

Ошибка очень информативна. В основном это говорит о том, что R пытался использовать методы S3, однако не было никакого "gnestg.glmmML "

Что насчет mclogit функция, которую предлагает пользователь 227710. Посмотрим

data(Transport)

fit <- mclogit(
  cbind(resp,suburb)~distance+cost,
  data=Transport
)

class(fit)
[1] "mclogit" "lm"

Класс fit является mclogit а также lm, Будет predict Работа? Да! Когда вы звоните predict(fit) predict Функция сначала будет искать predict.mclogit, которого не существует. Далее будет искать predict.lm, Который существует.

Другие вопросы по тегам