turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- Analytics
- /
- Stat Procs
- /
- Optimal Design, implementing constraints

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

10-04-2016 04:10 AM

Hello,

this is the first SAS-question I ever posted and I am completely new to SAS (version 9.4). I only need to program one thing with SAS, but I encountered a problem, I cant find the answer for. I need to find an optimal Design for an intelligence test using the optex procedure. Here is the code I have so far:

proc plan ordered;

factors x1=2 x2=2 x3=2 x4=2 x5=2 x6=2 / noprint;

output out=Candidate

x1 nvals=(0 to 1)

x2 nvals=(0 to 1)

x3 nvals=(0 to 1)

x4 nvals=(0 to 1)

x5 nvals=(0 to 1)

x6 nvals=(0 to 1); *give each level a valuename. Since it is nominal I choose the classic 0 and 1;

data Candidate; set Candidate;

if (^((x1 = 1) & (x2 = 1) & (x3 = 1) & (x4 = 1) & (x5 = 1)));

if (^((x6 = 1) & (x2 = 1) & (x3 = 1) & (x4 = 1) & (x5 = 1)));

if (^((x1 = 1) & (x6 = 1) & (x3 = 1) & (x4 = 1) & (x5 = 1)));

if (^((x1 = 1) & (x2 = 1) & (x6 = 1) & (x4 = 1) & (x5 = 1)));

if (^((x1 = 1) & (x2 = 1) & (x3 = 1) & (x6 = 1) & (x5 = 1)));

if (^((x1 = 1) & (x2 = 1) & (x3 = 1) & (x4 = 1) & (x6 = 1)));

if (^((x1 = 1) & (x2 = 1) & (x3 = 1) & (x4 = 1) & (x5 = 1) & (x6 = 1)));

if (^((x1 = 1) & (x2 = 0) & (x3 = 0) & (x4 = 0) & (x5 = 0) & (x6 = 0)));

if (^((x1 = 0) & (x2 = 1) & (x3 = 0) & (x4 = 0) & (x5 = 0) & (x6 = 0)));

if (^((x1 = 0) & (x2 = 0) & (x3 = 1) & (x4 = 0) & (x5 = 0) & (x6 = 0)));

if (^((x1 = 0) & (x2 = 0) & (x3 = 0) & (x4 = 1) & (x5 = 0) & (x6 = 0)));

if (^((x1 = 0) & (x2 = 0) & (x3 = 0) & (x4 = 0) & (x5 = 1) & (x6 = 0)));

if (^((x1 = 0) & (x2 = 0) & (x3 = 0) & (x4 = 0) & (x5 = 0) & (x6 = 1)));

if (^((x1 = 0) & (x2 = 0) & (x3 = 0) & (x4 = 0) & (x5 = 0) & (x6 = 0)));

run;

proc print data=Candidate(obs=16);

run;

proc optex data=Candidate seed=123456 coding = orth;

class x1 x2 x3 x4 x5 x6;

model x1 x2 x3 x4 x5 x6 x1*x2 x1*x3 x1*x4 x1*x5 x1*x6 x2*x3 x2*x4 x2*x5 x2*x6 x3*x4 x3*x5 x3*x6 x4*x5 x4*x6 x5*x6;

blocks structure = (20)12;

output out=IQ;

proc print data= IQ;

run;

As you can see, there are six different nominal factors defined (x1-x6). Each factor represents a rule of thinking that is either required in a test item (factor value = 1) or not (factor value = 0). Each item can hence be seen as a specific experimental condition, which is defined by a certain combination of factor levels, that is a specific combination of applied rules of thinking. I excluded all conditions from the design in which zero, only one, or more than four rules are active. Here is my problem: For practical reasons, we cannot have the testees work on too many four-rule-items because they are too difficult and time consuming. The idea is, that we have 20 people work on 12 items each (I programed that using the blocks structure statement). I would like to implement the constraint that only 2 out of the 12 items for each person are 4 rule-items. The rest beeing five 2-rule items and five 3 rule-items. Then I would like to recieve the optimal design for that. Is that somehow possible? Thank you in advance.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Dave90

10-05-2016 03:23 AM - edited 10-05-2016 04:20 AM

I am not sure that I can offer a solution here, only some suggestions on how to check up on what OPTEX is doing. I have modified your code as follows:

```
proc plan ordered;
factors x1=2 x2=2 x3=2 x4=2 x5=2 x6=2 / noprint;
output out=Candidate
x1 nvals=(0 to 1)
x2 nvals=(0 to 1)
x3 nvals=(0 to 1)
x4 nvals=(0 to 1)
x5 nvals=(0 to 1)
x6 nvals=(0 to 1); *give each level a valuename. Since it is nominal I choose the classic 0 and 1;
run;
data Candidate;
set Candidate;
nitems = sum (of x1-x6);
if nitems in (2,3,4); /* this is equivalent to the 15 if statements above */
rnum + 1; /* number each candidate run */
rstr = cats( of x1-x6 ); /* make a string that represents each run */
run;
proc freq data=candidate;
tables nitems;
run;
proc optex data=Candidate seed=123456 coding = orth;
class x1 x2 x3 x4 x5 x6;
model x1 x2 x3 x4 x5 x6 x1*x2 x1*x3 x1*x4 x1*x5 x1*x6 x2*x3 x2*x4 x2*x5 x2*x6 x3*x4 x3*x5 x3*x6 x4*x5 x4*x6 x5*x6;
id rnum rstr nitems;
blocks structure = (20)12;
output out=IQ;
run;
proc tabulate data=IQ noseps;
class rnum rstr nitems;
tables rnum*rstr*nitems, n*f=3.0;
run;
proc tabulate data=IQ noseps;
class block x1-x6 nitems;
tables block, (x1-x6)*n=' '*f=3.0;
tables block, nitems*n=' '*f=3.0;
run;
```

From the output of the 1st TABULATE it is clear that, in order to support the model you have specified, OPTEX gives preference to candidates with 2 and 4 items as they are selected 6 times each, while candidates with 3 items are only selected 3 times each. So the further restrictions that you want to place on the 4 item candidates must reduce the quality of the design that you get. The last table shows that each subject currently gets 4 or 5 runs with 4 items, and you want to reduce this to 2.

I would consider making the design in two steps. So first select 240 runs using the model you want, and then divide them into blocks in a 2nd step. You could do this with two OPTEX statements or by adding a GENERATE n=240 statement to your existing code. You could then use the AUGMENT option to force a preselected set of 40 4 item candidates into the design. Then augment these from a candidate set that has all the 2 and 3 items runs.

You are putting a lot of constraints on the problem and I would recommend proceeding with caution. Perhaps pilot your experiment with 6 or 7 subjects and check that you are able to analyze the data how you intended.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to IanWakeling

10-05-2016 06:28 AM

Yes, I am aware of the problems with implementing these constraints. But I will try to get the design in two steps. Thank you for the advice.