【问题标题】:How to predict random and fixed effect models?如何预测随机和固定效应模型?
【发布时间】:2015-09-26 17:50:23
【问题描述】:

我最近刚刚从 STATA 更​​改为 R,在实现与 STATA 命令xtlogit,fe or repredict 等效的 R 时遇到了一些麻烦。我可以请求一些帮助来调整以下场景:

  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"))

但这似乎不起作用。请问如何调整glmmodel的随机效应和固定效应,以便使用predictfunction。

【问题讨论】:

标签: r glm predict generic-function


【解决方案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 函数。因此,当您在 glmmML 类的对象上调用 predict 函数时,会出现错误。

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 方法,但是没有“predict.glmmML”

user227710 建议的mclogit 函数怎么样。让我们看看

data(Transport)

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

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

fit 的类是mclogitlmpredict 会工作吗?是的!当您调用predict(fit) 时,predict 函数将首先查找不存在的predict.mclogit。接下来它将寻找predict.lm。确实存在。

【讨论】:

  • 感谢您的建议。根据 mclogit 的手册,可以只指定随机效果。请问您如何使用该库确定固定效果的预测? THX
  • 另外,还必须按照您的示例中的建议创建响应计数cbind(resp,suburb)
猜你喜欢
  • 2016-05-13
  • 2022-01-05
  • 2022-11-27
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多