Коэффициент корреляции Пирсона в пакете опросов R


Извините, если это действительно очевидно, но я не вижу, как сделать простую корреляцию Пирсона между двумя переменными в пакете опроса. Мои данные имеют страты, так что это было бы эквивалентно нахождению r для api00 и api99 в apistrat.

library(survey)
data(api)

dstrat <- svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)

Я уверен, что должен быть простой способ сделать это с помощью svyvar или svyglm или что-то еще, но я не вижу его?

3 6

3 ответа:

Вы можете использовать svyvar для оценки матрицы дисперсии-ковариации, а затем масштабировать ее до корреляции:

library(survey)
data(api)

dstrat <- svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
v <- svyvar(~api00+api99, dstrat)

as.matrix(v)
cov2cor(as.matrix(v))
Это работает для любого числа корреляций и любого дизайна.
library(survey)
data(api)
dstrat<-svydesign(id=~1,strata=~stype, weights=~pw, data=apistrat, fpc=~fpc)
summary(svyglm(api00~ell+meals+mobility, design=dstrat),correlation=T)

Я немного поразмыслил над этой проблемой и начинаю думать, что лучший путь вперед-это сначала масштабировать обе переменные, предположительно используя svymean и svyvar.

dstrat2 <- transform(dstrat, 
                     z_api99 = (api99 - svymean(~api99,    dstrat))/sqrt(svyvar(~api99, dstrat)), 
                     z_api00 = (api00 - svymean(~api00, dstrat))/sqrt(svyvar(~api00, dstrat))) 

svyglm(z_api99 ~ z_api00, dstrat2)$coefficients

Это дает 9.759047 e-01, что является тем же результатом, что и использование:

library(weights)
wtd.cor(apistrat$api99, apistrat$api00, weight = apistrat$pw)

У него есть то преимущество, что он может быть использован практически с любым типом дизайна съемки. Он также обеспечивает способ получения стандартизированных бета-коэффициентов, если существует больше переменных. Это не совсем то, что я искал. с оригинальным вопросом, но это может быть лучшим способом, если нет конкретного варианта.

Если кто-нибудь еще может подтвердить, работает это или нет, или если есть лучший способ, то я был бы очень признателен за любые дальнейшие комментарии.