使用r base,权重和调查的列联表p值

时间:2018-05-17 16:49:41

标签: r crosstab chi-squared weighted p-value

r列联表加权p值

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

典型的政治调查包含一个名为WEIGHT的变量。本博客的目的是使用基本r,r权重包和r调查包比较偶然表加权p值,使用上面给出的SAS中极其简单的数据集。基本包结果与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(.365和.443)的p值与权重和调查(.864和.882)的结果完全不同。我有兴趣让别人向我解释差异的原因,并建议对上述政治数据类型的适用性。

1 个答案:

答案 0 :(得分:0)

当您报告加权卡方检验时 - 使用我的this.包或weights包 - 基线分析假设您的权重与选择概率成比例,而不是数字的情况。这是使用调查数据的常规方式。您可以在Survey包中将mean1设置为false,从而获得所需的结果。

weights