R 找出加权比例的标准误差(调查数据)
我创建了一个用户函数来为分类调查数据生成交叉表。例如,我编写了一个按性别查找Q50_1的函数。看起来很棒 但是现在,我想为每一行添加一列,和相应的SE,但我无法找到解决方案。这是我想要的输出(本例中SE是假的) 以下是我的数据: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
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)