r взвешенная кросс-таблица p значение по сравнению с SAS

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

Я получаю другой ответ в r, чем ответ с сайта, указанного выше. Сначала я дам код SAS с результатами, а затем код r с результатами. Сначала дается код SAS с результатами:

data SummerSchool; 
   input Gender $ Internship $ Enrollment $ Count @@; 
   datalines;
boys  yes yes 35   boys  yes no 29 
boys   no yes 14   boys   no no 27
girls yes yes 32   girls yes no 10  
girls  no yes 53   girls  no no 23
;
proc freq data=SummerSchool order=data;
   tables Internship*Enrollment / chisq;
   weight Count;

запустить;

Выход

Table   
    yes no
yes 67  39
no  67  50

                              Value     Prob  
Chi-Square                      1   0.8189  0.3655
Likelihood Ratio Chi-Square     1   0.8202  0.3651
Continuity Adj. Chi-Square      1   0.5899  0.4425
Mantel-Haenszel Chi-Square      1   0.8153  0.3666

=========================

Теперь я дам код r, используя как пакет весов, так и пакет опроса.

> tt$nnn=as.numeric(tt$count)
> attach(tt)
> tt
    sex internship enrollment count nnn
1  boys        yes        yes    35  35
2  boys         no        yes    14  14
3 girls        yes        yes    32  32
4 girls         no        yes    53  53
5  boys        yes         no    29  29
6  boys         no         no    27  27
7 girls        yes         no    10  10
8 girls         no         no    23  23
> library(plyr)
> count(tt,c('internship','enrollment'),wt_var='nnn')
  internship enrollment freq
1         no         no   50
2         no        yes   67
3        yes         no   39
4        yes        yes   67
> library(weights)
> wtd.chi.sq(internship,enrollment,weight=nnn)
    Chisq        df   p.value 
0.0293791 1.0000000 0.8639066
> library(survey) 
> tt.d=svydesign(ids = ~1, data =tt,weights =tt$nnn)
> 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

Результаты 2 r по существу согласуются друг с другом (0,86 и 0,88), но полностью отличаются от результатов SAS (между 0,37 и 0,44). Возможно ли, что SAS дает односторонний результат, а r дает двусторонний результат? Если да, то каковы плюсы и минусы одностороннего и двустороннего результата в этой ситуации?


person Bob    schedule 15.05.2018    source источник


Ответы (1)


Я думаю, вы неправильно используете пакет опроса weights-argument. В книге Ламли, прилагаемой к этому пакету, различаются три возможных интерпретации термина «веса». Пример SAS демонстрирует значение «весовых коэффициентов». Вы можете получить эквивалентные результаты с обычным кодом R: сравните этот вывод с SAS Continuity Adj. Хи-квадрат:

chisq.test(   xtabs( count ~ internship+enrollment, data=tt) )

    Pearson's Chi-squared test with Yates' continuity correction

data:  xtabs(count ~ internship + enrollment, data = tt)
X-squared = 0.58989, df = 1, p-value = 0.4425

Пакет опроса разработан, чтобы дать вам возможность воспроизвести результаты более сложных процедур в SAS, а именно PROC SURVEYMEANS, PROC SURVEYFREQ и PROC SURVEYREG. Также он может предоставлять те же возможности, что и SUDAAN.

person IRTFM    schedule 15.05.2018
comment
Спасибо. Ваш ответ был чрезвычайно полезным, и я, вероятно, воспользуюсь предложенным вами кодом. Я знаю, что пакет опроса предназначен для использования в сложных ситуациях, которые вы описали, но до сих пор не понимаю, почему невозможно использовать пакет опроса в простой ситуации, которая у нас есть. Я также не понимаю, почему пакет r weights, который я использовал в своем примере, гораздо лучше соответствовал результатам опроса, чем результатам SAS. - person Bob; 15.05.2018