/**********************************************************************/
/* DATA Step Method--Three Chi-square Tests */
/* for Testing Equal Cell Probabilities */
/* create data set of cell counts */
proc freq data=defects;
tables type / noprint out=cells;
run;
proc summary;
var count;
/* data set SUMMARY contains */
/* total count and number of cells */
output out=summary sum=total n=ncells;
run;
data _null_;
set cells nobs=ncells end=eof;
if _n_=1 then set summary;
/* equal expected cell counts */
cellexp=total/ncells;
/* PEARSON'S CHI-SQUARE */
/* cell contribution to chi-square */
cellchsq=(count-cellexp)**2 / cellexp;
/* sum is Pearson chi-square */
chisq+cellchsq;
/* NEYMAN CHI-SQUARE */
/* cell contribution to chi-square */
ncellcsq=(count-cellexp)**2 / count;
/* sum is Neyman chi-square */
nchisq+ncellcsq;
/* LIKELIHOOD RATIO CHI-SQUARE */
/* cell contribution to G**2 */
cellg2=count*log(count/cellexp);
/* sum is one-half G**2 */
g2+cellg2;
if eof then do;
g2=2*g2;
df=ncells-1;
pchisq=1-probchi(chisq,df);
pnchisq=1-probchi(nchisq,df);
pg2=1-probchi(g2,df);
put // @21 'Pearson chi-square = ' chisq;
put @21 'Degrees of freedom = ' df;
put @21 'Pr > chi-square = ' pchisq 6.4 / ;
put @21 'Neyman chi-square = ' nchisq;
put @21 'Degrees of freedom = ' df;
put @21 'Pr > chi-square = ' pnchisq 6.4 / ;
put @17 'Likelihood ratio chi-square = ' g2;
put @17 'Degrees of freedom = ' df;
put @17 'Pr > chi-square = ' pg2 6.4;
end;
run;
/**********************************************************************/
/* PROC CATMOD Method--Neyman's Chi-square */
/* for Testing Equal Cell Probabilities */
proc catmod data=defects;
response marginals;
model type=;
restrict b1=.2 b2=.2 b3=.2 b4=.2;
run;
/**********************************************************************/
proc catmod data=cells;
weight count;
response marginals;
model type=;
restrict b1=.2 b2=.2 b3=.2 b4=.2;
run;
/**********************************************************************/
proc catmod data=defects;
response + -.2, -.2, -.2, -.2
* 1 0 0 0 0,
0 1 0 0 0,
0 0 1 0 0,
0 0 0 1 0;
model type= / noint;
run;
/**********************************************************************/
response marginals;
/**********************************************************************/
/* PROC CATMOD Method--The Likelihood Ratio Chi-Square */
/* for Testing Equal Cell Probabilities */
proc catmod data=defects;
model type= / noint ml nogls;
run;
/**********************************************************************/
proc catmod data=cells;
weight count;
model type= / noint ml nogls;
run;
/**********************************************************************/
/* PROC CAPABILITY Method--Pearson's Chi-square */
/* for Testing Equal Cell Probabilities */
proc capability data=defects noprint;
histogram type / midpoints=1 to 5
beta(alpha=1 beta=1 theta=0.5 sigma=5);
title 'Pearson''s chi-square test for equal probabilities';
run;
/**********************************************************************/
/* DATA Step Method--Three Chi-square Tests */
/* for Testing for a Specified Distribution */
proc freq data=defects;
/* create data set of cell counts */
tables type / noprint out=cells;
run;
data cells;
/* update data set CELLS with expected cell counts */
set cells;
input cellexp @@;
cards;
12.5 12.5 50 12.5 12.5
run;
proc summary;
var count;
/* data set SUMMARY contains */
/* total count and number of cells */
output out=summary sum=total n=ncells;
run;
data _null_;
set cells nobs=ncells end=eof;
if _n_=1 then set summary;
/* PEARSON'S CHI-SQUARE */
/* cell contribution to chi-square */
cellchsq=(count-cellexp)**2 / cellexp
/* sum is Pearson chi-square */
chisq+cellchsq;
/* NEYMAN CHI-SQUARE */
/* cell contribution to chi-square */
ncellcsq=(count-cellexp)**2 / count;
/* sum is Neyman chi-square */
nchisq+ncellcsq;
/* LIKELIHOOD RATIO CHI-SQUARE */
/* cell contribution to G**2 */
cellg2=count*log(count/cellexp);
/* sum is one-half G**2 */
g2+cellg2;
if eof then do;
g2=2*g2;
df=ncells-1;
pchisq=1-probchi(chisq,df);
pnchisq=1-probchi(nchisq,df);
pg2=1-probchi(g2,df);
put // @21 'Pearson chi-square = ' chisq;
put @21 'Degrees of freedom = ' df;
put @21 'Pr > chi-square = ' pchisq 6.4 / ;
put @21 'Neyman chi-square = ' nchisq;
put @21 'Degrees of freedom = ' df;
put @21 'Pr > chi-square = ' pnchisq 6.4 / ;
put @17 'Likelihood ratio chi-square = ' g2;
put @17 'Degrees of freedom = ' df;
put @17 'Pr > chi-square = ' pg2 6.4;
end;
run;
/**********************************************************************/
/* PROC CATMOD Method--Neyman's Chi-square */
/* for Testing for a Specified Distribution */
proc catmod data=defects;
response marginals;
model type=;
restrict b1=.125 b2=.125 b3=.5 b4=.125;
run;
/**********************************************************************/
proc catmod data=defects;
response + -.125, -.125, -.5, -.125
* 1 0 0 0 0,
0 1 0 0 0,
0 0 1 0 0,
0 0 0 1 0;
model type= / noint;
run;
/**********************************************************************/
/* PROC CATMOD Method--The Likelihood Ratio Chi-Square */
/* for Testing for a Specified Distribution */
proc catmod data=defects;
model type= / ml;
restrict b1=0 b2=0 b3=1.3863 b4=0;
run;
/**********************************************************************/