N/A
Posts: 1

# Process SAS uses to calculate p-values in PROC GLM

I'm trying to do a pairwise test to calculate p-values between various products that are being evaluated by several assessors. I'm trying to understand what SAS is doing, and I'm running into an issue in one particular situation: when the items being compared (in my case SAMPLE) are complete for one item in the pairwise comparison but not the other. Here's an example:

``data raw;INPUT JUDGE REP SAMPLE X1;datalines;1 1 1 3.01 2 1 4.02 1 1 7.02 2 1 2.01 1 2 1.01 2 2 6.02 1 2 3.0;run;proc glm data = raw;class judge sample rep;model      X1 = judge sample rep judge * sample / ss3;lsmeans sample / stderr tdiff alpha=0.10 e=judge*sample;run;``

In this case we have a JUDGE (2) who is missing REP 2 for SAMPLE 2. SAMPLE 1 has a complete set of data. When I calculate the pairwise comparison between SAMPLE 1 and 2, I get a p-value of 0.48973, whereas in SAS it's an even 0.5. To get my value I'm doing the following:

mse = interaction_sum_of_squares / degrees of freedom = 0.66666666 / 1
constant = sum of (1/n1j + 1/n2j) = (1/2 + 1/2 + 1/2 + 1) = 2.5
sd = sqrt( (mse / num_judges^2) * constant)) = 0.6454972

t-value = lsmean1 - lsmean2 / sd = (4.0 - 3.3333333) / (0.6454972) = 1.032796

Meanwhile, the SAS t-value is 1.0.

I'm matching the lsmeans that SAS is getting, and the interaction_sum_of_squares and the degrees of freedom match what SAS is putting out as well. That really only leaves the constant, or something else SAS is doing which I can't figure out.

I match SAS perfectly when the data is balanced, it's only when it's unbalanced that it's not working.

Discussion stats
• 0 replies
• 527 views
• 0 likes
• 1 in conversation