R调查包中的皮尔逊相关系数



如果这真的很明显,我很抱歉,但我不知道如何在调查包中的两个变量之间进行简单的Pearson相关性。我的数据有地层,所以它相当于在apistrat中找到api00和api99的r。

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

我确信一定有一种简单的方法可以用svyvar或svyglm之类的东西来做这件事,但我看不到?

您可以使用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.759047e-01,这与使用的结果相同

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

它的优点是几乎可以用于任何勘测设计类型。如果有更多的变量,它还提供了一种获得标准化贝塔系数的方法。这并不是我最初提出的问题,但如果没有具体的选择,这可能是最好的方法。

如果其他人能确认这是否有效,或者是否有更好的方法,那么我将非常感谢任何进一步的评论。

最新更新