R expss表格中的百分比不准确
我正在分析一些调查数据,并使用R expss表格中的百分比不准确,r,expss,R,Expss,我正在分析一些调查数据,并使用expss创建表格 我们的问题之一是关于品牌意识。我有三种类型的品牌:BrandA是样本中大部分人看到的品牌,BrandB是样本中较小(相互排斥!)部分人看到的品牌,BrandC是每个受访者看到的品牌 我想将这一意识问题作为一个多回答问题来处理,并报告了解每个品牌的人(实际看到该品牌的人)的百分比。(在本例中,值1表示受访者知道该品牌。) 我能得到的最接近的结果是使用下面的代码,但是tab_stat_cpct()没有报告准确的百分比或案例,如附表所示。当您将表中列出
expss
创建表格
我们的问题之一是关于品牌意识。我有三种类型的品牌:BrandA是样本中大部分人看到的品牌,BrandB是样本中较小(相互排斥!)部分人看到的品牌,BrandC是每个受访者看到的品牌
我想将这一意识问题作为一个多回答问题来处理,并报告了解每个品牌的人(实际看到该品牌的人)的百分比。(在本例中,值1表示受访者知道该品牌。)
我能得到的最接近的结果是使用下面的代码,但是tab_stat_cpct()
没有报告准确的百分比或案例,如附表所示。当您将表中列出的总百分比与手动计算的总百分比进行比较时(即,通过mean(data$BrandA,na.rm=TRUE)
),报告的值对于BrandA和BrandB太低,对于BrandC太高。(更不用说案件总数应该是25起。)
我已经阅读了文档,我知道这个问题是由于tab\u stat\u cpct()
如何定义一个“case”来计算百分比,但我没有看到一个参数会调整该定义以满足我的需要。我错过什么了吗?或者是否有其他方法来报告准确的百分比?谢谢
set.seed(123)
data <- data.frame(
Age = sample(c("25-34", "35-54", "55+"), 25, replace = TRUE),
BrandA = c(1, 0, 0, 1, 0, 1, NA, NA, NA, NA, NA, NA, NA, 1,
0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1),
BrandB = c(NA, NA, NA, NA, NA, NA, 1, 1, 0, 1, 0, 1, 1, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
BrandC = c(1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0,
1, 1, 1, 0, 1, 0, 1, 0, 1)
)
data %>%
tab_cells(mrset(as.category(BrandA %to% BrandC))) %>%
tab_cols(total(), Age) %>%
tab_stat_cpct() %>%
tab_last_sig_cpct() %>%
tab_pivot()
## | | #Total | Age | | |
## | | | 25-34 | 35-54 | 55+ |
## | | | A | B | C |
## | ------------ | ------ | ------- | ----- | ---- |
## | BrandA | 52.4 | 83.3 B | 28.6 | 50.0 |
## | BrandB | 23.8 | | 42.9 | 25.0 |
## | BrandC | 71.4 | 100.0 C | 71.4 | 50.0 |
## | #Total cases | 21 | 6 | 7 | 8 |
set.seed(123)
数据%
选项卡单元(mrset(作为类别(BrandA%到%BrandC)))%>%
表列(总计(),年龄)%>%
tab_stat_cpct()%>%
tab_last_sig_cpct()%>%
tab_pivot()
##| |#总|年龄| ||
## | | | 25-34 | 35-54 | 55+ |
##| | A | B | C|
## | ------------ | ------ | ------- | ----- | ---- |
##|布兰达| 52.4 | 83.3 B | 28.6 | 50.0|
##| BrandB | 23.8 | 42.9 | 25.0|
##| BrandC | 71.4 | 100.0 C | 71.4 | 50.0|
##|#病例总数| 21 | 6 | 7 | 8|
认为多个响应集中的所有项目都具有相同的基础。mdset
的基数是至少有一个非空项(值为1的项)的情况数。这就是为什么你们品牌的基数是21。如果我们将单独处理每个项目,那么我们需要显示每个项目的总计以计算显著性。在许多情况下,这很不方便
在您的情况下,您可以使用以下功能:
library(expss)
tab_stat_dich = function(data, total_label = NULL, total_statistic = "u_cases",
label = NULL){
if (missing(total_label) && !is.null(data[["total_label"]])) {
total_label = data[["total_label"]]
}
if(is.null(total_label)){
total_label = "#Total"
}
# calculate means
res = eval.parent(
substitute(
tab_stat_mean_sd_n(data, weighted_valid_n = "w_cases" %in% total_statistic,
labels = c("|", "@@@@@", total_label),
label = label)
)
)
curr_tab = res[["result"]][[length(res[["result"]])]]
# drop standard deviation
curr_tab = curr_tab[c(TRUE, FALSE, TRUE), ]
# convert means to percent
curr_tab[c(TRUE, FALSE), -1] = curr_tab[c(TRUE, FALSE), -1] * 100
## clear row labels
curr_tab[[1]] = gsub("^(.+?)\\|(.+)$", "\\2", curr_tab[[1]], perl = TRUE )
res[["result"]][[length(res[["result"]])]] = curr_tab
res
}
set.seed(123)
data <- data.frame(
Age = sample(c("25-34", "35-54", "55+"), 25, replace = TRUE),
BrandA = c(1, 0, 0, 1, 0, 1, NA, NA, NA, NA, NA, NA, NA, 1,
0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1),
BrandB = c(NA, NA, NA, NA, NA, NA, 1, 1, 0, 1, 0, 1, 1, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
BrandC = c(1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0,
1, 1, 1, 0, 1, 0, 1, 0, 1)
)
res = data %>%
tab_cells(BrandA %to% BrandC) %>%
tab_cols(total(), Age) %>%
tab_stat_dich() %>%
tab_last_sig_cpct() %>%
tab_pivot()
res
# | | #Total | Age | | |
# | | | 25-34 | 35-54 | 55+ |
# | | | A | B | C |
# | ------ | ------ | ----- | ------ | ---- |
# | BrandA | 61.1 | 71.4 | 83.3 C | 20.0 |
# | #Total | 18 | 7 | 6 | 5 |
# | BrandB | 71.4 | 100.0 | 66.7 | 50.0 |
# | #Total | 7 | 2 | 3 | 2 |
# | BrandC | 60.0 | 55.6 | 66.7 | 57.1 |
# | #Total | 25 | 9 | 9 | 7 |
# if we want to drop totals
where(res, !grepl("#", row_labels))
# | | #Total | Age | | |
# | | | 25-34 | 35-54 | 55+ |
# | | | A | B | C |
# | ------ | ------ | ----- | ------ | ---- |
# | BrandA | 61.1 | 71.4 | 83.3 C | 20.0 |
# | BrandB | 71.4 | 100.0 | 66.7 | 50.0 |
# | BrandC | 60.0 | 55.6 | 66.7 | 57.1 |
库(expss)
tab_stat_dich=函数(数据,总计标签=NULL,总计统计=“总计案例”,
标签=空){
if(缺少(总标签)&&!为.null(数据[[“总标签”]])){
总标签=数据[[“总标签”]]
}
如果(为空(总标签)){
total_label=“#total”
}
#计算方法
res=评估父项(
替代品(
tab_stat_mean_sd_n(数据,加权有效案例,占总统计的百分比),
标签=c(“|”、“总标签”),
标签=标签)
)
)
curr_tab=res[[“结果”][[长度(res[[“结果”]])]]
#下降标准差
当前选项卡=当前选项卡[c(真、假、真),]
#将平均值转换为百分比
当前选项卡[c(真,假),-1]=当前选项卡[c(真,假),-1]*100
##清除行标签
当前选项卡[[1]]=gsub(“^(+.+?)\\\\\\\(.+)$”,“\\2”,当前选项卡[[1]],perl=TRUE)
res[[“结果”][[长度(res[[“结果”]])]]=当前选项卡
物件
}
种子集(123)
数据%
tab_单元格(BrandA%到%BrandC)%>%
表列(总计(),年龄)%>%
tab_stat_dich()%>%
tab_last_sig_cpct()%>%
tab_pivot()
物件
#| |#总|年龄| ||
# | | | 25-34 | 35-54 | 55+ |
#| | A | B | C|
# | ------ | ------ | ----- | ------ | ---- |
#|布兰达| 61.1 | 71.4 | 83.3 C | 20.0|
#|#总计| 18 | 7 | 6 | 5|
#| BrandB | 71.4 | 100.0 | 66.7 | 50.0|
#|#总计| 7 | 2 | 3 | 2|
#| BrandC | 60.0 | 55.6 | 66.7 | 57.1|
#|#总计| 25 | 9 | 9 | 7|
#如果我们想减少总数
其中(res,!grepl(“#”,第#行标签))
#| |#总|年龄| ||
# | | | 25-34 | 35-54 | 55+ |
#| | A | B | C|
# | ------ | ------ | ----- | ------ | ---- |
#|布兰达| 61.1 | 71.4 | 83.3 C | 20.0|
#| BrandB | 71.4 | 100.0 | 66.7 | 50.0|
#| BrandC | 60.0 | 55.6 | 66.7 | 57.1|