`glmer {lme4}`出错:无法将类“family”强制转换为data.frame

时间:2016-12-04 23:34:07

标签: r regression lme4

我使用包glmer()中的lme4函数运行具有随机效果的广义线性模型。

模型代码如下所示:

mod6 <- glmer((Ndifference+74337) ~ netm1011 + d1011 + 
           b0001 + (1|region), Gamma(link = "identity"))

Ndifference是50个州(和DC)的200到2010年人口差异的统计数据。有一个负值(密歇根州在-74336)所以我添加了一个常数以确保我的回答都是正面的。

所有预测因子(除了区域的随机效应)都是比例或百分比。 Netm1011(2010年向各州移民的比率)和d1011(每1000人死亡率)都有几个负值。 B0001包含所有正比例(出生率/ 1000人)。

当我运行模型时,我不断收到此错误:

Error in as.data.frame.default(data) : 
  cannot coerce class ""family"" to a data.frame

我也尝试过不同的发行版系列(Gammainverse.gaussian)。这个错误代码究竟是什么意思?

1 个答案:

答案 0 :(得分:4)

glmer(formula, data = NULL, family = gaussian, control = glmerControl(),
      start = NULL, verbose = 0L, nAGQ = 1L, subset, weights, na.action,
      offset, contrasts = NULL, mustart, etastart,
      devFunOnly = FALSE, ...)

您也想指定正式参数:

family = Gamma(link = "identity")

如果未指定正式参数,则参数与position匹配。第二个参数是data,但您将Gamma函数传递给它。所以model.frame无效。

这可能是glmer的特定问题。glm比较:

glm(formula, family = gaussian, data, weights, subset,
    na.action, start = NULL, etastart, mustart, offset,
    control = list(...), model = TRUE, method = "glm.fit",
    x = FALSE, y = TRUE, contrasts = NULL, ...)

第二个参数是familydata是第三个参数。所以你没有问题:

glm((Ndifference+74337) ~ netm1011 + d1011, Gamma(link = "identity"))

另请考虑gam中的mgcv

gam(formula,family=gaussian(),data=list(),weights=NULL,subset=NULL,
    na.action,offset=NULL,method="GCV.Cp",
    optimizer=c("outer","newton"),control=list(),scale=0,
    select=FALSE,knots=NULL,sp=NULL,min.sp=NULL,H=NULL,gamma=1,
    fit=TRUE,paraPen=NULL,G=NULL,in.out,drop.unused.levels=TRUE,
    drop.intercept=NULL,...)

我们也看到family也位于第二位。