Since the respiratory data in Example 39.5 are binary, you can use the ALR algorithm to model the log odds ratios instead of using working correlations to model associations. In this example, a "fully parameterized cluster" model for the log odds ratio is fit. That is, there is a log odds ratio parameter for each unique pair of responses within clusters, and all clusters are parameterized identically. The following statements fit the same regression model for the mean as in Example 39.5 but use a regression model for the log odds ratios instead of a working correlation. The LOGOR=FULLCLUST option specifies a fully parameterized log odds ratio model.
proc genmod data=resp descend; class id treatment(ref="P") center(ref="1") sex(ref="M") baseline(ref="0") / param=ref; model outcome=treatment center sex age baseline / dist=bin; repeated subject=id(center) / logor=fullclust; run;
The results of fitting the model are displayed in Output 39.6.1 along with a table that shows the correspondence between the log odds ratio parameters and the within-cluster pairs. Model goodness-of-fit criteria are shown in Output 39.6.2. The QIC for the ALR model shown in Output 39.6.2 is 511.86, whereas the QIC for the unstructured working correlation model shown in Output 39.5.4 is 512.34, indicating that the ALR model is a slightly better fit.
Log Odds Ratio Parameter Information |
|
---|---|
Parameter | Group |
Alpha1 | (1, 2) |
Alpha2 | (1, 3) |
Alpha3 | (1, 4) |
Alpha4 | (2, 3) |
Alpha5 | (2, 4) |
Alpha6 | (3, 4) |
Analysis Of GEE Parameter Estimates | |||||||
---|---|---|---|---|---|---|---|
Empirical Standard Error Estimates | |||||||
Parameter | Estimate | Standard Error | 95% Confidence Limits | Z | Pr > |Z| | ||
Intercept | -0.9266 | 0.4513 | -1.8111 | -0.0421 | -2.05 | 0.0400 | |
treatment | A | 1.2611 | 0.3406 | 0.5934 | 1.9287 | 3.70 | 0.0002 |
center | 2 | 0.6287 | 0.3486 | -0.0545 | 1.3119 | 1.80 | 0.0713 |
sex | F | 0.1024 | 0.4362 | -0.7526 | 0.9575 | 0.23 | 0.8144 |
age | -0.0162 | 0.0125 | -0.0407 | 0.0084 | -1.29 | 0.1977 | |
baseline | 1 | 1.8980 | 0.3404 | 1.2308 | 2.5652 | 5.58 | <.0001 |
Alpha1 | 1.6109 | 0.4892 | 0.6522 | 2.5696 | 3.29 | 0.0010 | |
Alpha2 | 1.0771 | 0.4834 | 0.1297 | 2.0246 | 2.23 | 0.0259 | |
Alpha3 | 1.5875 | 0.4735 | 0.6594 | 2.5155 | 3.35 | 0.0008 | |
Alpha4 | 2.1224 | 0.5022 | 1.1381 | 3.1068 | 4.23 | <.0001 | |
Alpha5 | 1.8818 | 0.4686 | 0.9634 | 2.8001 | 4.02 | <.0001 | |
Alpha6 | 2.1046 | 0.4949 | 1.1347 | 3.0745 | 4.25 | <.0001 |
GEE Fit Criteria | |
---|---|
QIC | 511.8589 |
QICu | 499.6516 |
You can fit the same model by fully specifying the z matrix. The following statements create a data set containing the full z matrix:
data zin; keep id center z1-z6 y1 y2; array zin(6) z1-z6; set resp ; by center id; if first.id then do; t = 0; do m = 1 to 4; do n = m+1 to 4; do j = 1 to 6; zin(j) = 0; end; y1 = m; y2 = n; t + 1; zin(t) = 1; output; end; end; end; run;
proc print data=zin (obs=12);
Output 39.6.3 displays the full z matrix for the first two clusters. The z matrix is identical for all clusters in this example.
Obs | z1 | z2 | z3 | z4 | z5 | z6 | center | id | y1 | y2 |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 2 |
2 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 3 |
3 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 4 |
4 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 2 | 3 |
5 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 2 | 4 |
6 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 3 | 4 |
7 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 1 | 2 |
8 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 2 | 1 | 3 |
9 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 2 | 1 | 4 |
10 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 2 | 2 | 3 |
11 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 2 | 2 | 4 |
12 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 2 | 3 | 4 |
The following statements fit the model for fully parameterized clusters by fully specifying the z matrix. The results are identical to those shown previously.
proc genmod data=resp descend; class id treatment(ref="P") center(ref="1") sex(ref="M") baseline(ref="0") / param=ref; model outcome=treatment center sex age baseline / dist=bin; repeated subject=id(center) / logor=zfull zdata=zin zrow =(z1-z6) ypair=(y1 y2) ; run;