【发布时间】:2018-02-13 23:02:07
【问题描述】:
我正在使用加权分析并使用svyglm 来分析来自复杂加权方案的无回复数据。我想通过将binomial(link=log) 指定为家庭来拟合对数二项式模型来估计在大多数情况下适合的流行率。但是,在默认拟合器无法找到一组起始系数的情况下,我发现在大多数情况下都可以使用的方便设置是设置Start <- c(log(mean(response.var)), rep(0, ncov))。
当我将start 提供给survey 包中的svyglm 函数时,R 抛出了一个我似乎无法解析的错误。似乎只要协变量之一是一个因素。
例子:
library(survey)
data(api)
apistrat$qmeal <- with(apistrat, cut(meals, quantile(meals)))
dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
还有一个有问题的 GLM 示例,建模一些荒谬的东西来重现错误:
> svyglm(awards ~ qmeal +emer, family=quasibinomial(link=log), design=dstrat)
Error: no valid set of coefficients has been found: please supply starting values
好的...所以我指定:Start <- c(log(mean(api$awards, na.rm=T)), 0, 0, 0, 0)
> svyglm(awards ~ cut(meals, quantile(meals)) +emer, family=quasibinomial, design=dstrat, start=start)
> svyglm(awards ~ qmeal +emer, family=quasibinomial(link=log), design=dstrat, start=start)
Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, :
length of 'start' should equal 5 and correspond to initial coefs for c("(Intercept)", "qmeal(20.8,39.5]", "qmeal(39.5,69]", "qmeal(69,100]", , "emer")
有趣的是,start 的长度为 5。我进一步注意到,svyglm 始终会产生一个额外的,(在最后一个 qmeal 变量和“emer”之间查找),但缺少条目。这在提供给标准glm时没有这样的问题:
glm(awards ~ qmeal +emer, family=quasibinomial(link=log), data=apistrat, start=start)
产生正确的输出:
Call: glm(formula = awards ~ qmeal + emer, family = quasibinomial(link = log),
data = apistrat, start = start)
Coefficients:
(Intercept) qmeal(20.8,39.5] qmeal(39.5,69] qmeal(69,100] emer
-0.59276 0.13058 0.31311 0.24698 -0.01389
Degrees of Freedom: 198 Total (i.e. Null); 194 Residual
(1 observation deleted due to missingness)
Null Deviance: 272.7
Residual Deviance: 265.7 AIC: NA
【问题讨论】: