首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lme4 "glmer“的Hausman规范测试

lme4 "glmer“的Hausman规范测试
EN

Stack Overflow用户
提问于 2014-05-13 11:37:50
回答 1查看 3.4K关注 0票数 6

我想建立一个“广义线性模型的固定/随机模型”(family=“二项式”),因为我有一个数据库,其中的观测来自一个群体,并且有一个分组结构。然后我使用了来自lme4包的函数lme4,我还读到可以使用库MASS中的glmmPQL函数(Faraway,2006)。

当我想用Hausman's测试(Greene,2012)证明使用随机模型和固定模型时,我的问题就出现了,我找不到一个特定的函数,它允许我这样做,类似于包plm中的plm测试。

如何使用随机模型来证明正确?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-13 15:07:32

这是对plm::phtest函数的直接调整。我已经评论了我实际上修改过的唯一代码行。使用您自己的风险,如果可能的话,根据plm::phtest的结果对其进行测试。我只是修改了代码,没有考虑它是否真的做了正确的事情!

代码语言:javascript
复制
phtest_glmer <- function (glmerMod, glmMod, ...)  {  ## changed function call
    coef.wi <- coef(glmMod)
    coef.re <- fixef(glmerMod)  ## changed coef() to fixef() for glmer
    vcov.wi <- vcov(glmMod)
    vcov.re <- vcov(glmerMod)
    names.wi <- names(coef.wi)
    names.re <- names(coef.re)
    coef.h <- names.re[names.re %in% names.wi]
    dbeta <- coef.wi[coef.h] - coef.re[coef.h]
    df <- length(dbeta)
    dvcov <- vcov.re[coef.h, coef.h] - vcov.wi[coef.h, coef.h]
    stat <- abs(t(dbeta) %*% as.matrix(solve(dvcov)) %*% dbeta)  ## added as.matrix()
    pval <- pchisq(stat, df = df, lower.tail = FALSE)
    names(stat) <- "chisq"
    parameter <- df
    names(parameter) <- "df"
    alternative <- "one model is inconsistent"
    res <- list(statistic = stat, p.value = pval, parameter = parameter, 
        method = "Hausman Test",  alternative = alternative,
                data.name=deparse(getCall(glmerMod)$data))  ## changed
    class(res) <- "htest"
    return(res)
}

示例:

代码语言:javascript
复制
library(lme4)
gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
                   data = cbpp, family = binomial)
gm0 <- glm(cbind(incidence, size - incidence) ~ period +  herd,
                   data = cbpp, family = binomial)

phtest_glmer(gm1,gm0)
##  Hausman Test
## data:  cbpp
## chisq = 10.2747, df = 4, p-value = 0.03605
## alternative hypothesis: one model is inconsistent

这似乎也适用于lme模型:

代码语言:javascript
复制
library("nlme")
fm1 <- lme(distance ~ age, data = Orthodont) # random is ~ age
fm0 <- lm(distance ~ age*Subject, data = Orthodont)
phtest_glmer(fm1,fm0)

## Hausman Test 
## data:  Orthodont
## chisq = 0, df = 2, p-value = 1
## alternative hypothesis: one model is inconsistent
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23630214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档