使用 r 基数、权重和调查的列联表 p 值

Posted

技术标签:

【中文标题】使用 r 基数、权重和调查的列联表 p 值【英文标题】:contingency table p values using r base, weights and survey 【发布时间】:2018-10-28 00:46:59 【问题描述】:

r 列联表加权 p 值

http://support.sas.com/documentation/cdl/en/procstat/67528/html/default/viewer.htm#procstat_freq_gettingstarted01.htm

一项典型的政治调查包含一个名为 WEIGHT 的变量。本博客的目的是使用上面给出的 SAS 极其简单的数据集比较使用基数 r、r 权重包和 r 调查包的列联表加权 p 值。基础包结果与 SAS 和 SPSS 基础包中的结果相同。然而,权重包和调查包产生的结果彼此相似,但与基本包的结果完全不同。我很想有人向我解释为什么这些结果如此不同。这可能是我的编码错误或其他两个包的不同假设。我会对来自 PEW 或 ANES(美国全国选举研究)的典型数据集的最佳方法的建议感兴趣,

首先我从基础包中给出 r 代码:

>attach(tt)
> print(tt)
    sex internship enrollment count
1  boys        yes        yes    35
2  boys         no        yes    14
3 girls        yes        yes    32
4 girls         no        yes    53
5  boys        yes         no    29
6  boys         no         no    27
7 girls        yes         no    10
8 girls         no         no    23
> xx=xtabs(count~internship+enrollment,data=tt)
> print(xx)
          enrollment
internship no yes
       no  50  67
       yes 39  67
> chisq.test(xx,correct=F)
        Pearson's Chi-squared test
data:  xx
X-squared = 0.81894, df = 1, p-value = 0.3655
> chisq.test(xx)
        Pearson's Chi-squared test with Yates' continuity correction
data:  xx
X-squared = 0.58989, df = 1, p-value = 0.4425

这些结果与以下 SAS 代码的结果一致(请参阅上述参考):

proc freq data=SummerSchool order=data;
   tables Internship*Enrollment / chisq;
   weight Count;
run;

结果也与 SPSS 15 和 SPSS 克隆 PSPP 的以下代码的结果一致:

WEIGHT BY COUNT.
CROSSTABS TABLES=INTERNSHIP BY ENROLLMENT
/STATISTICS=CHISQ.

但是,权重和调查中的以下代码会产生不同的结果:

> library(weights)
> wtd.chi.sq(internship,enrollment,weight=count)
    Chisq        df   p.value 
0.0293791 1.0000000 0.8639066 
> library(survey)
> tt.d=svydesign(ids = ~1, data =tt,weights =tt$count)
> svychisq(~internship+enrollment,tt.d)
        Pearson's X^2: Rao & Scott adjustment
data:  svychisq(~internship + enrollment, tt.d)
F = 0.023599, ndf = 1, ddf = 7, p-value = 0.8822

请注意,基数 r 的 p 值(.365 和 .443 )与权重和调查的结果(.864 和 .882)完全不同。我希望有人向我解释差异的原因,并建议适用于上述政治数据类型。

【问题讨论】:

【参考方案1】:

当您使用我的weights 包或Survey 包报告加权卡方检验时,基线分析假定您的权重与选择概率成正比,而不是与个案数量成正比。这是使用调查数据的正常方式。您可以通过在weights 包中将mean1 设置为false 来获得您想要的结果。

wtd.chi.sq(internship,enrollment,weight=count, mean1=FALSE)

Chisq        df   p.value 
0.8189423 1.0000000 0.3654896 

【讨论】:

以上是关于使用 r 基数、权重和调查的列联表 p 值的主要内容,如果未能解决你的问题,请参考以下文章

如何从r中的列联表中获取带有案例的data.frame?

R语言使用addmargins函数和prop.table函数为二维列联表计算列(column)比例值以及对应的边缘比率值使用addmargins函数和prop.table函数计算二维列联表行边缘比率

R语言使用addmargins函数和prop.table函数为二维列联表计算列(column)比例值以及对应的边缘比率值使用addmargins函数和prop.table函数计算二维列联表行边缘比率

R语言table函数和xtabs函数生成三维列联表使用margin.table函数prop.table函数和addmargins函数计算多维列联表的边缘频率值频率计数比例值ftable美化输出

R语言使用prop.table函数为二维列联表计算所有类别组合的比例使用addmargins函数为二维列联表计算所有的边缘频数值使用addmargins函数和prop.table函数计算边缘比率值

R语言进行制表