我想获得在 R 中计算复杂调查数据的相关性的显着性值!据我所知,调查包的相关性计算如下:
var <- svyvar(~var1+var2, design, na.rm=TRUE)
cov2cor(as.matrix(var))
但这仅提供相关系数。因此我的问题是:如何获得这样的相关性的显着性值?我知道这可以通过将
sig.stats = TRUE
参数传递给jtools包中的svycor
函数来完成:
svycor(~var1+var2,
design,
na.rm = TRUE,
sig.stats = TRUE,
bootn = 1000)
然而,这依赖于权重包中的
wtd.cor
函数 - 由于 gdata 依赖项的一些问题,我在安装时遇到了麻烦。有人有解决方法吗?提前非常感谢!
获得此显着性检验的最简单方法是
summary(svyglm(var2~var1, design=design, na.rm=TRUE))
相关性为零的原假设正是变量之间的关系不存在线性分量的原假设。这使您非常接近如果
svycontrast
在 svyvar
输出 上工作时可以进行的测试
也就是说,假设
svycontrast.svyvar<-function(stats, ...){
s<-as.vector(as.matrix(stats))
nms<-as.vector(outer(rownames(stats),colnames(stats),paste,sep=":"))
v<-vcov(stats)
names(s)<-nms
dimnames(v)<-list(nms,nms)
attr(s,"var")<-v
attr(s,"statistic")<-"variance"
class(s)<-"svystat"
svycontrast(s,...)
}
然后以内置
dclus1
数据集为例
> summary(svyglm(api00~ell,design=dclus1))
Call:
svyglm(formula = api00 ~ ell, design = dclus1)
Survey design:
svydesign(id = ~dnum, fpc = ~fpc, data = apiclus1)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 746.926 26.900 27.77 5.85e-13 ***
ell -3.721 0.467 -7.97 2.33e-06 ***
和
> b<-svyvar(~api00+ell,dclus1)
> svycontrast(b, quote(`api00:ell`/sqrt(`api00:api00`*`ell:ell`)))
nlcon SE
contrast -0.5941 0.0778
> -0.5941/ 0.0778
[1] -7.636247
对于基本相同的 z 统计量,您可以将其转换为 p 值。
这比使用
weights
包更好,因为 weights::wtd.cor
不考虑聚类或分层,仅考虑权重。