survey packageに相関係数を算出するコマンドがなかったのでメモ。こちらのサイトが参考になった。
library(survey)
data(api)
dstrat <- svydesign(
id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc
)
var <- svyvar(~ api00 + api99, design = dstrat)
cov2cor(as.matrix(var))
これで相関係数が算出される。標準誤差がほしい場合はややこしくなる。先のサイトでは、weights関数を使って計算している模様。
svycor <- function(model, design) {
mf <- model.frame(model, model.frame(dstrat), na.action = na.pass)
wts <- weights(dstrat, "sampling")
wcors <- weights::wtd.cor(mf,
weight = wts, bootse = TRUE, mean1 = TRUE,
bootn = 1000, bootp = TRUE
)
return(wcors)
}
cors <- svycor(~api00 + api99, dstrat)
cors$correlation
cors$p.value
cors$std.err