Как предсказать модели случайных и фиксированных эффектов?
Я только недавно сделал переход с 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
, Который существует.