BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
BlueNose
Quartz | Level 8

Hello,

I have posted a question on the macro and DATA step forum, which is related do simulations, and more precisely to a simulation from Rick Wicklin's book, so I was advised to post it here although it's not really about IML or matrices.

I bought the "Simulating Data with SAS book". I am relatively new to SAS programming (although was using SAS for analysis for some time), and wishes to improve my SAS skills, in particular the ones required for the clinical world.

I read the program in section 5.4.2 about simulating the power of the t-test. The program assumes varying effect sizes. I wanted to change the code so it will suit varying sample sizes rater than effect sizes (it would be ideal if both could vary but this is complicated).

After fixing my code several times because I got it wrong, I finally got results which are almost identical to the ones of the power proc. However, in page 86 in the book there is a graph. When I ran Rick's code, I got this graph too. After I changed the program, the line disappeared, only the dots were presented. When I changed the series x=N y=p, I got a line, that connects my points, but it wasn't the line of proc power. When I keep it as series x=N y=Power, I get dots only. I can't figure out why, I tried comparing the output files, the structure looked identical.

My next stage will be to try and simulate power for other statistical tests and models, I will try and most likely ask a few questions in the future. My ideal goal will be to create a small library of power analysis code for several situations (superiority, non-inferiority, equivalence) of different variables (continuous, binary, time to event, ...).

Thank you !

proc power;

  twosamplemeans  power = .         

    meandiff = 3                    

    stddev = 2                     

    ntotal=10 to 40 by 10;          

  plot x=N markers=none;

  ods output Output=Power;          

run;

data PowerSim(drop=i);

    call streaminit(321);

    do N = 5 to 20 by 5;

           do SampleID = 1 to 10000;

              c = 1;

              do i = 1 to N;

                 x1 = rand("Normal", 0, 2);

                 output;

              end;

              c = 2;

              do i = 1 to N;

                 x1 = rand("Normal", 3, 2);

                 output;

              end;

           end;

    end;

run;

proc ttest data=PowerSim;

   by N SampleID;

   class c;

   var x1;

   ods output ttests=TTests(where=(method="Pooled"));

run;

data Results;

   set TTests;

   RejectH0 = (Probt le 0.05);

run;

proc freq data=Results noprint;

   by N;

   tables RejectH0 / out=SimPower(where=(RejectH0=1));

run;

data Combine;

   set SimPower Power;

   p = percent / 100;

   label p="Power";

run;

proc sgplot data=Combine noautolegend;

   title "Power of the t Test";

   title2 "Samples are N(0,stdev) and N(delta,stdev)";

   series x=N y=Power;

   scatter x=N y=p;

   xaxis label="Sample size";

run;

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

It sounds like you want to use the code provided in Section 5.5 to produce a graph similar to Figure 5.10.

However, you deleted several important lines of code, including suppressing the output from PROC TTEST.

In particular you deleted the statement

NSamp = NTotal / 2;

in the DATA COMBINE step.  The call to PROC SGPLOT needs to use the NSamp variable for the SERIES statement and the N variable for the SCATTER statement.

I've attached the program that I think you are trying to create.

SimTTest.png

View solution in original post

3 REPLIES 3
Rick_SAS
SAS Super FREQ

It sounds like you want to use the code provided in Section 5.5 to produce a graph similar to Figure 5.10.

However, you deleted several important lines of code, including suppressing the output from PROC TTEST.

In particular you deleted the statement

NSamp = NTotal / 2;

in the DATA COMBINE step.  The call to PROC SGPLOT needs to use the NSamp variable for the SERIES statement and the N variable for the SCATTER statement.

I've attached the program that I think you are trying to create.

SimTTest.png

BlueNose
Quartz | Level 8

Thank you very much, I appreciate it.

I did suppressing the output, I just didn't copy this part here, assuming that the problem wasn't there. I think I understand what went wrong.

If I want to convert your code to a case of a non-inferiority hypothesis, will the only thing I'll have to do be to change the t-test to a one sided test compared to a non zero number ?

Rick_SAS
SAS Super FREQ

I'm not sure, but I would try to get PROC TTEST to do most of the work. The SIDES= and H0= options enable you to specify whatever null hypothesis you are interested in.  See

the 2015 SAS Global Forum paper by Castello and Watts: http://support.sas.com/resources/papers/proceedings15/SAS1911-2015.pdf

Message was edited by: Rick Wicklin

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 3 replies
  • 1611 views
  • 3 likes
  • 2 in conversation