BookmarkSubscribe
Choose Language Hide Translation Bar
Super User

## factorial to degree script

I'm having a hard time making factorial to degree inside of a script in order to assign certain DOE factors to some factorial.

I can get the first level with nchoosekMatrix() but can't figure out how to dynamically get levels higher than 1.

``````Names default to here(1);

factorial_to_degree = function({factors, degree = 2, termlist = {}},
{DEFAULT LOCAL},
if(degree!=1,
termlist = recurse(factors, degree-1, termlist);
);
nckmat = nchoosekmatrix(nrows(factors), degree);
for(r = 1, r<=nrows(nckmat), r++,
for(c=1, c<=ncols(nckmat), c++,
);
);
return(termlist);
);

factorial_to_degree([1, 2, 3], 2);

//returns
/*
AddTerm( {1, 1}, {3, 1} ), AddTerm( {2, 1}, {3, 1} )}
*/

//want it to return
/*
{
AddTerm( {1, 1}, {2, 1} ), AddTerm( {1, 1}, {3, 1} ), AddTerm( {2, 1}, {3, 1} )
}
*/``````

I think I should be doing something recursively but I'm having a hard time actually getting anything to work.

Any help would greatly be appreciated.

Vince Faller - Predictum
1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted
Super User

## Re: factorial to degree script

I realized that my expectations were not right.  This actually does the same thing as what fit model macro does.

I like the following iterative approach more though.

``````factorial_to_degree = function({factors, degree},
n_factors = nitems(factors);
factors = shape(factors, n_factors);
termlist = {};
for(i=1, i<=degree, i++,
nckmat = nchoosekmatrix(n_factors, i);
for(r = 1, r<=nrows(nckmat), r++,
for(c=1, c<=ncols(nckmat), c++,
);
);
);
return(termlist);
);
``````
Vince Faller - Predictum
Highlighted
Super User

## Re: factorial to degree script

I realized that my expectations were not right.  This actually does the same thing as what fit model macro does.

I like the following iterative approach more though.

``````factorial_to_degree = function({factors, degree},
n_factors = nitems(factors);
factors = shape(factors, n_factors);
termlist = {};
for(i=1, i<=degree, i++,
nckmat = nchoosekmatrix(n_factors, i);
for(r = 1, r<=nrows(nckmat), r++,
for(c=1, c<=ncols(nckmat), c++,
);
);
);
return(termlist);
);
``````
Vince Faller - Predictum