中的R调查包循环通过(R Looping through in survey package)

2019-08-02 18:49发布

我在使用通过调查包变量循环问题。 比方说,我有我的变量收集与调查权重一起数据帧的一个子集,我想进行卡方检验。 考虑到与多重检验的问题轴承,我还是想测试的所有独特的组合。 这通常被设定为R相对简单,并有一个很好的例子在这里 。

很不幸,这成为调查中包困难,因为项目需要在设计目标,最重要的是不支持的数据集索引(至少据我所知)。 我试着调整上述对svychisq的例子,但我所有的策略都失败了。

我注意到,有人做了类似的东西在这里 ,但大多数的变量是固定的。 会有人能够创建一个函数(类似的东西这个答案也许),但使用svychisq功能? 不幸的是,我不知道,有很多分类变量和复杂的设计可在网上的数据集。 出于演示的目的,我想人们可以在通过第一10个变量显示在功能帮助文件,并试图回路数据(API)使用dclus1

library(survey)
data(api)
dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)
svychisq(~sch.wide+stype, dclus1)

任何帮助将不胜感激。

更新:我真正想要做的是避免指定变量名称,并给变量组合的载体来代替。 例如

MyChi2tests <- apply( combn(colnames(apiclus1[,c(2,16:17)]),2), 2, function(z) paste(z, collapse = '+')) 

Answer 1:

library(survey)
data(api)
dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)

# run a simple example svychisq() function
svychisq( ~sch.wide+stype , dclus1 )

# create a function that requires a character string (containing the variables)
# and the design object and runs the svychisq() 
# on the contents of that character string's columns
scsloop <- function( vars , design ){ svychisq( as.formula( paste0( "~" , vars ) ) , design ) }

# test it out
scsloop( "sch.wide+stype" , dclus1 )
scsloop( "sch.wide+comp.imp" , dclus1 )

# either create a character vector to run it multiple times
cols.to.chisq <- c( "sch.wide" , "comp.imp" , "stype" )

# or identify them based on column number, if you prefer
cols.to.chisq <- names( apiclus1 )[ c( 2 , 16 , 17 ) ]


# find every combination of that vector, taken two at a time
combos <- combn( cols.to.chisq , 2 )

# separate them by +
col.combos <- paste( combos[ 1 , ] , combos[ 2 , ] , sep = "+" )

# run it on each of those character strings (print to screen and save to list)
( x <- lapply( col.combos , scsloop , dclus1 ) )

# just for kicks, print everything to the screen
col.combos[1] ; x[[1]]
col.combos[2] ; x[[2]]
col.combos[3] ; x[[3]]


文章来源: R Looping through in survey package
标签: r survey