在 R 中对调查数据进行 row/column 百分比?

Doing row/column percents with survey data in R?

我正在用 R 分析一些调查数据。由于样本设计,所有分析都必须使用可以考虑样本结构的 "survey" 包来完成,这意味着我不能只使用 prop.table() 获取列内或行内百分比,就像我在非调查数据上的方式。

对于不熟悉 row/column 百分比术语的任何人,我的意思是一个变量的百分比以另一个变量的特定 row/column 为条件。例如:

      | male | female
black | 10   | 20
white | 15   | 15
other | 10   | 15

行百分比是单元格中的观察值数除以该行中的观察值数,例如,"other" 行中 "male" 的百分比是 40% (10/( 10+15))。列百分比将是单元格中的观察数除以该列中的观察数,例如 "female" 列中 "other" 的百分比是 30% (15/(20+15+15 )).通常这些很容易用prop.table()计算出来,但是这次我不能用prop.table(),因为它没有考虑调查样本设计。

我一直在谷歌搜索和测试,试图弄清楚如何使用 "survey" 包来做到这一点,到目前为止我已经找到了 svytable() function and can get it to give me a basic cross-tab of counts (eg. race by gender) but not survey-weighted percents. I have also found the svymean() and svytotal() 功能,但到目前为止我已经设法做到的是从 svymean() 获得单变量加权百分比(它似乎将每个类别虚拟编码为 0/1 然后取平均值),并将 svymean 与交互函数(例如 svymean(~interaction(race,gender),...))结合起来得到单元格百分比(例如 "black males are XX% of the total sample"),但我仍然无法获得行内和列内百分比。

我如何获得 "survey" 包来为我提供两个变量的交叉表的调查调整后的列和行百分比?

您没有提供任何样本数据,所以我将使用调查包的内置数据集:

library(survey)

data(api)
dclus1 <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)
svyby(~awards, by = ~stype, design=dclus1, FUN=svymean)

  stype  awardsNo awardsYes se.awardsNo se.awardsYes
E     E 0.2291667 0.7708333  0.02904587   0.02904587
H     H 0.5714286 0.4285714  0.14564997   0.14564997
M     M 0.4800000 0.5200000  0.11663553   0.11663553

这些是百分比,或三种学校类型中每种奖项类别(是/否)的百分比。我们看到整个加利福尼亚州 中 77.1% 的小学有资格参加奖励计划。