R 找出加权比例的标准误差(调查数据)

R 找出加权比例的标准误差(调查数据),r,dplyr,survey,R,Dplyr,Survey,我创建了一个用户函数来为分类调查数据生成交叉表。例如,我编写了一个按性别查找Q50_1的函数。看起来很棒 但是现在,我想为每一行添加一列,和相应的SE,但我无法找到解决方案。这是我想要的输出(本例中SE是假的) 以下是我的数据: data_in <- read_table2("Q50_1 Q50_2 Q38 Q90 pov gender wgt never always Yes 2 High M 1.3 sometimes always

我创建了一个用户函数来为分类调查数据生成交叉表。例如,我编写了一个按性别查找Q50_1的函数。看起来很棒

但是现在,我想为每一行添加一列,和相应的SE,但我无法找到解决方案。这是我想要的输出(本例中SE是假的)

以下是我的数据:

data_in <- read_table2("Q50_1   Q50_2   Q38 Q90 pov gender  wgt
never   always   Yes 2   High    M   1.3
sometimes   always   No  2   Med F   0.4
always   sometimes   Yes 4   Low F   1.2
never   never   No  2   High    M   0.5
always   always   No  4   High    M   0.7
sometimes   never   Yes 3   Low F   0.56
sometimes   never   Yes 2   Med F   0.9
")

中的
data\u我们可以修改函数来计算误差幅度(
moe\u交叉表
),并根据置信区间水平计算标准误差

library(dplyr)
library(purrr)
library(tidyr)
library(pollster)
crosstab <- function(data, target, columns, weight,target_name, zval){
  
  target <- enquo(target)
  weight <- enquo(weight)
  target_name <- enquo(target_name)
   return(purrr::map_dfr(columns, ~    xtab_func(data,
             .x, !!target, !!weight, zval))) 
  
}




xtab_func <- function(data, col, target, weight, zval){
   col <- sym(col)
   target <- enquo(target)
   weight <- enquo(weight)
   pollster::crosstab(df = data, !!target, !!col, !!weight, format = "long") %>% 
      bind_cols(pollster::moe_crosstab(df = data, !!col,
                  !!target, !! weight) %>%
              transmute(SE = moe/zval)) %>%  
      pivot_longer(cols = starts_with("Q")) 
}

你查过moe_交叉表了吗?谢谢,我正要发布。我不知道误差幅度==误差标准你这里的代码是否可以变得更简单
map\u dfr(列,~xtab\u func(数据,.x,!!目标,!!权重))
即排除
for
循环和列表初始化。因此,如果你计算的置信区间为95%,那么SE=moe/1。96@akrun非常感谢。
library(dplyr)
library(purrr)
library(tidyr)
library(pollster)
crosstab <- function(data, target, columns, weight,target_name, zval){
  
  target <- enquo(target)
  weight <- enquo(weight)
  target_name <- enquo(target_name)
   return(purrr::map_dfr(columns, ~    xtab_func(data,
             .x, !!target, !!weight, zval))) 
  
}




xtab_func <- function(data, col, target, weight, zval){
   col <- sym(col)
   target <- enquo(target)
   weight <- enquo(weight)
   pollster::crosstab(df = data, !!target, !!col, !!weight, format = "long") %>% 
      bind_cols(pollster::moe_crosstab(df = data, !!col,
                  !!target, !! weight) %>%
              transmute(SE = moe/zval)) %>%  
      pivot_longer(cols = starts_with("Q")) 
}
crosstab(data_in,gender, c("Q50_1", "Q50_2"), wgt, "gender", 1.96)