Rのsurvey packageには通常の回帰分析におけるR2値を計算する関数が存在しないようである。なので計算方法。参考にしたのはこちらのサイト。コードを見るとわかるが、途中でヌルモデルを計算してるので複雑なデザインだと算出に時間がかかるかもしれない。ちなみに調整済R2は計算できない。モデル比較をしたいならanova関数を使うと良いらしい。
library(survey)
data(api)
dstrat <- svydesign(
id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc
)
lm1 <- svyglm(api00 ~ ell + meals + mobility, design = dstrat)
lm2 <- svyglm(api00 ~ ell, design = dstrat)
lm3 <- svyglm(api00 ~ ell * meals * mobility, design = dstrat)
svyrsq <- function(object) {
if (!object$family$family == "gaussian") {
stop("only applied 'family = gaussian'")
}
null_f <- update(object$formula, . ~ 1)
null_e <- survey::svyglm(null_f, design = object$survey.design) # ヌルモデルを計算
tot_var <- summary(null_e)$dispersion[1]
res_var <- summary(object)$dispersion[1]
rsq <- 1 - res_var / tot_var
return(rsq)
}
svyrsq(lm1)
svyrsq(lm2)
svyrsq(lm3)
# モデル比較をしたい場合はanovaを使う
anova(lm2, lm1)
anova(lm3, lm1)