在 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% 的小学有资格参加奖励计划。
我正在用 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% 的小学有资格参加奖励计划。