cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
Choose Language Hide Translation Bar
angela
Level II

How to create mixture DOEs with several ingredient groups?

I am struggling with a complicated mixture DOE request. Please see the details in the picture below. Shall I do DOEs in stages? How to screen so many factors in the mixture DOE?

angela_2-1674519420129.png

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Victor_G
Super User

Re: How to create mixture DOEs with several ingredient groups?

Hi @angela,


This topic seems similar to this one, dealing with "Mixtures of Mixtures"  : How to have a mixture of mixtures design - JMP User Community. Two options may be possible :

  1. Work with individual components from your formulation "groups" : clear overview of the impact of each individual constituants, but may represent a very large number of experiments, or
  2. Work with pre-tested/pre-defined group mixtures : a lot less experiments needed, but you may lose some informations in the process, for example interactions between individual components.

 

Since you're interested in screening factors from the experiment, I have two questions :

  1. Is a Mixture design the only option (what I mean here is that the different components are ALWAYS introduced in the mixture and their quantities relative to other parts of the formulation ?) ? Trying to screen factors with a mixture design may be complicated and results in a large number of experiments, hence the question.
  2. Are all constraints necessary ? By reducing the experimental space, some informations may be missed.


I tried to test a D-optimal design with all your constraints, but it seems I can't introduce the constraint 4 when ingredients from group G are used as mixture factors. The design without this constraint would represent 105 experiments and look like this (script here to test it, datatable included if it is more convenient for you): 

DOE(
	Custom Design,
	{Add Response( Maximize, "Y", ., ., . ), Add Factor( Mixture, 0, 1, "S1", 0 ),
	Add Factor( Mixture, 0, 1, "S2", 0 ), Add Factor( Mixture, 0, 1, "F1", 0 ),
	Add Factor( Mixture, 0, 1, "F2", 0 ), Add Factor( Mixture, 0, 1, "T1", 0 ),
	Add Factor( Mixture, 0, 1, "T2", 0 ), Add Factor( Mixture, 0, 1, "T3", 0 ),
	Add Factor( Mixture, 0, 1, "T4", 0 ), Add Factor( Mixture, 0, 1, "H1", 0 ),
	Add Factor( Mixture, 0, 1, "H2", 0 ), Add Factor( Mixture, 0, 1, "H3", 0 ),
	Add Factor( Mixture, 0, 1, "G1", 0 ), Add Factor( Mixture, 0, 1, "G2", 0 ),
	Add Factor( Mixture, 0, 1, "G3", 0 ), Add Factor(
		Continuous, 1.5, 3, "Water", 0
	), Set Random Seed( 800692047 ), Number of Starts( 2 ),
	Add Constraint(
		[-1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.35,
		1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55,
		0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 -0.24,
		0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0.34,
		0 0 0 0 -1 -1 -1 -1 0 0 0 0 0 0 0 -0.07,
		0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0.14,
		0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 0 -0.001,
		0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0.015]
	), Add Term( {1, 1} ), Add Term( {2, 1} ), Add Term( {3, 1} ),
	Add Term( {4, 1} ), Add Term( {5, 1} ), Add Term( {6, 1} ), Add Term( {7, 1} ),
	Add Term( {8, 1} ), Add Term( {9, 1} ), Add Term( {10, 1} ), Add Term( {11, 1} ),
	Add Term( {12, 1} ), Add Term( {13, 1} ), Add Term( {14, 1} ),
	Add Term( {15, 1} ), Add Alias Term( {1, 1}, {2, 1} ),
	Add Alias Term( {1, 1}, {3, 1} ), Add Alias Term( {1, 1}, {4, 1} ),
	Add Alias Term( {1, 1}, {5, 1} ), Add Alias Term( {1, 1}, {6, 1} ),
	Add Alias Term( {1, 1}, {7, 1} ), Add Alias Term( {1, 1}, {8, 1} ),
	Add Alias Term( {1, 1}, {9, 1} ), Add Alias Term( {1, 1}, {10, 1} ),
	Add Alias Term( {1, 1}, {11, 1} ), Add Alias Term( {1, 1}, {12, 1} ),
	Add Alias Term( {1, 1}, {13, 1} ), Add Alias Term( {1, 1}, {14, 1} ),
	Add Alias Term( {1, 1}, {15, 1} ), Add Alias Term( {2, 1}, {3, 1} ),
	Add Alias Term( {2, 1}, {4, 1} ), Add Alias Term( {2, 1}, {5, 1} ),
	Add Alias Term( {2, 1}, {6, 1} ), Add Alias Term( {2, 1}, {7, 1} ),
	Add Alias Term( {2, 1}, {8, 1} ), Add Alias Term( {2, 1}, {9, 1} ),
	Add Alias Term( {2, 1}, {10, 1} ), Add Alias Term( {2, 1}, {11, 1} ),
	Add Alias Term( {2, 1}, {12, 1} ), Add Alias Term( {2, 1}, {13, 1} ),
	Add Alias Term( {2, 1}, {14, 1} ), Add Alias Term( {2, 1}, {15, 1} ),
	Add Alias Term( {3, 1}, {4, 1} ), Add Alias Term( {3, 1}, {5, 1} ),
	Add Alias Term( {3, 1}, {6, 1} ), Add Alias Term( {3, 1}, {7, 1} ),
	Add Alias Term( {3, 1}, {8, 1} ), Add Alias Term( {3, 1}, {9, 1} ),
	Add Alias Term( {3, 1}, {10, 1} ), Add Alias Term( {3, 1}, {11, 1} ),
	Add Alias Term( {3, 1}, {12, 1} ), Add Alias Term( {3, 1}, {13, 1} ),
	Add Alias Term( {3, 1}, {14, 1} ), Add Alias Term( {3, 1}, {15, 1} ),
	Add Alias Term( {4, 1}, {5, 1} ), Add Alias Term( {4, 1}, {6, 1} ),
	Add Alias Term( {4, 1}, {7, 1} ), Add Alias Term( {4, 1}, {8, 1} ),
	Add Alias Term( {4, 1}, {9, 1} ), Add Alias Term( {4, 1}, {10, 1} ),
	Add Alias Term( {4, 1}, {11, 1} ), Add Alias Term( {4, 1}, {12, 1} ),
	Add Alias Term( {4, 1}, {13, 1} ), Add Alias Term( {4, 1}, {14, 1} ),
	Add Alias Term( {4, 1}, {15, 1} ), Add Alias Term( {5, 1}, {6, 1} ),
	Add Alias Term( {5, 1}, {7, 1} ), Add Alias Term( {5, 1}, {8, 1} ),
	Add Alias Term( {5, 1}, {9, 1} ), Add Alias Term( {5, 1}, {10, 1} ),
	Add Alias Term( {5, 1}, {11, 1} ), Add Alias Term( {5, 1}, {12, 1} ),
	Add Alias Term( {5, 1}, {13, 1} ), Add Alias Term( {5, 1}, {14, 1} ),
	Add Alias Term( {5, 1}, {15, 1} ), Add Alias Term( {6, 1}, {7, 1} ),
	Add Alias Term( {6, 1}, {8, 1} ), Add Alias Term( {6, 1}, {9, 1} ),
	Add Alias Term( {6, 1}, {10, 1} ), Add Alias Term( {6, 1}, {11, 1} ),
	Add Alias Term( {6, 1}, {12, 1} ), Add Alias Term( {6, 1}, {13, 1} ),
	Add Alias Term( {6, 1}, {14, 1} ), Add Alias Term( {6, 1}, {15, 1} ),
	Add Alias Term( {7, 1}, {8, 1} ), Add Alias Term( {7, 1}, {9, 1} ),
	Add Alias Term( {7, 1}, {10, 1} ), Add Alias Term( {7, 1}, {11, 1} ),
	Add Alias Term( {7, 1}, {12, 1} ), Add Alias Term( {7, 1}, {13, 1} ),
	Add Alias Term( {7, 1}, {14, 1} ), Add Alias Term( {7, 1}, {15, 1} ),
	Add Alias Term( {8, 1}, {9, 1} ), Add Alias Term( {8, 1}, {10, 1} ),
	Add Alias Term( {8, 1}, {11, 1} ), Add Alias Term( {8, 1}, {12, 1} ),
	Add Alias Term( {8, 1}, {13, 1} ), Add Alias Term( {8, 1}, {14, 1} ),
	Add Alias Term( {8, 1}, {15, 1} ), Add Alias Term( {9, 1}, {10, 1} ),
	Add Alias Term( {9, 1}, {11, 1} ), Add Alias Term( {9, 1}, {12, 1} ),
	Add Alias Term( {9, 1}, {13, 1} ), Add Alias Term( {9, 1}, {14, 1} ),
	Add Alias Term( {9, 1}, {15, 1} ), Add Alias Term( {10, 1}, {11, 1} ),
	Add Alias Term( {10, 1}, {12, 1} ), Add Alias Term( {10, 1}, {13, 1} ),
	Add Alias Term( {10, 1}, {14, 1} ), Add Alias Term( {10, 1}, {15, 1} ),
	Add Alias Term( {11, 1}, {12, 1} ), Add Alias Term( {11, 1}, {13, 1} ),
	Add Alias Term( {11, 1}, {14, 1} ), Add Alias Term( {11, 1}, {15, 1} ),
	Add Alias Term( {12, 1}, {13, 1} ), Add Alias Term( {12, 1}, {14, 1} ),
	Add Alias Term( {12, 1}, {15, 1} ), Add Alias Term( {13, 1}, {14, 1} ),
	Add Alias Term( {13, 1}, {15, 1} ), Add Alias Term( {14, 1}, {15, 1} ),
	Set Sample Size( 105 ), Simulate Responses( 0 ), Save X Matrix( 0 ), Make Design
	}
);

 

Since ingredients from group G have a very low concentration compared to other ingredients groups, one workaround may be to consider these ingredients as continuous factors in order to introduce your constraint 4 (not yet tested, will try later when I will have more time).

These are just some inputs to get to know your topic better, so that other members can join the discussions and provide relevant ideas.

 

Victor GUILLER

"It is not unusual for a well-designed experiment to analyze itself" (Box, Hunter and Hunter)

View solution in original post

7 REPLIES 7
Victor_G
Super User

Re: How to create mixture DOEs with several ingredient groups?

Hi @angela,


This topic seems similar to this one, dealing with "Mixtures of Mixtures"  : How to have a mixture of mixtures design - JMP User Community. Two options may be possible :

  1. Work with individual components from your formulation "groups" : clear overview of the impact of each individual constituants, but may represent a very large number of experiments, or
  2. Work with pre-tested/pre-defined group mixtures : a lot less experiments needed, but you may lose some informations in the process, for example interactions between individual components.

 

Since you're interested in screening factors from the experiment, I have two questions :

  1. Is a Mixture design the only option (what I mean here is that the different components are ALWAYS introduced in the mixture and their quantities relative to other parts of the formulation ?) ? Trying to screen factors with a mixture design may be complicated and results in a large number of experiments, hence the question.
  2. Are all constraints necessary ? By reducing the experimental space, some informations may be missed.


I tried to test a D-optimal design with all your constraints, but it seems I can't introduce the constraint 4 when ingredients from group G are used as mixture factors. The design without this constraint would represent 105 experiments and look like this (script here to test it, datatable included if it is more convenient for you): 

DOE(
	Custom Design,
	{Add Response( Maximize, "Y", ., ., . ), Add Factor( Mixture, 0, 1, "S1", 0 ),
	Add Factor( Mixture, 0, 1, "S2", 0 ), Add Factor( Mixture, 0, 1, "F1", 0 ),
	Add Factor( Mixture, 0, 1, "F2", 0 ), Add Factor( Mixture, 0, 1, "T1", 0 ),
	Add Factor( Mixture, 0, 1, "T2", 0 ), Add Factor( Mixture, 0, 1, "T3", 0 ),
	Add Factor( Mixture, 0, 1, "T4", 0 ), Add Factor( Mixture, 0, 1, "H1", 0 ),
	Add Factor( Mixture, 0, 1, "H2", 0 ), Add Factor( Mixture, 0, 1, "H3", 0 ),
	Add Factor( Mixture, 0, 1, "G1", 0 ), Add Factor( Mixture, 0, 1, "G2", 0 ),
	Add Factor( Mixture, 0, 1, "G3", 0 ), Add Factor(
		Continuous, 1.5, 3, "Water", 0
	), Set Random Seed( 800692047 ), Number of Starts( 2 ),
	Add Constraint(
		[-1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.35,
		1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55,
		0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 -0.24,
		0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0.34,
		0 0 0 0 -1 -1 -1 -1 0 0 0 0 0 0 0 -0.07,
		0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0.14,
		0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 0 -0.001,
		0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0.015]
	), Add Term( {1, 1} ), Add Term( {2, 1} ), Add Term( {3, 1} ),
	Add Term( {4, 1} ), Add Term( {5, 1} ), Add Term( {6, 1} ), Add Term( {7, 1} ),
	Add Term( {8, 1} ), Add Term( {9, 1} ), Add Term( {10, 1} ), Add Term( {11, 1} ),
	Add Term( {12, 1} ), Add Term( {13, 1} ), Add Term( {14, 1} ),
	Add Term( {15, 1} ), Add Alias Term( {1, 1}, {2, 1} ),
	Add Alias Term( {1, 1}, {3, 1} ), Add Alias Term( {1, 1}, {4, 1} ),
	Add Alias Term( {1, 1}, {5, 1} ), Add Alias Term( {1, 1}, {6, 1} ),
	Add Alias Term( {1, 1}, {7, 1} ), Add Alias Term( {1, 1}, {8, 1} ),
	Add Alias Term( {1, 1}, {9, 1} ), Add Alias Term( {1, 1}, {10, 1} ),
	Add Alias Term( {1, 1}, {11, 1} ), Add Alias Term( {1, 1}, {12, 1} ),
	Add Alias Term( {1, 1}, {13, 1} ), Add Alias Term( {1, 1}, {14, 1} ),
	Add Alias Term( {1, 1}, {15, 1} ), Add Alias Term( {2, 1}, {3, 1} ),
	Add Alias Term( {2, 1}, {4, 1} ), Add Alias Term( {2, 1}, {5, 1} ),
	Add Alias Term( {2, 1}, {6, 1} ), Add Alias Term( {2, 1}, {7, 1} ),
	Add Alias Term( {2, 1}, {8, 1} ), Add Alias Term( {2, 1}, {9, 1} ),
	Add Alias Term( {2, 1}, {10, 1} ), Add Alias Term( {2, 1}, {11, 1} ),
	Add Alias Term( {2, 1}, {12, 1} ), Add Alias Term( {2, 1}, {13, 1} ),
	Add Alias Term( {2, 1}, {14, 1} ), Add Alias Term( {2, 1}, {15, 1} ),
	Add Alias Term( {3, 1}, {4, 1} ), Add Alias Term( {3, 1}, {5, 1} ),
	Add Alias Term( {3, 1}, {6, 1} ), Add Alias Term( {3, 1}, {7, 1} ),
	Add Alias Term( {3, 1}, {8, 1} ), Add Alias Term( {3, 1}, {9, 1} ),
	Add Alias Term( {3, 1}, {10, 1} ), Add Alias Term( {3, 1}, {11, 1} ),
	Add Alias Term( {3, 1}, {12, 1} ), Add Alias Term( {3, 1}, {13, 1} ),
	Add Alias Term( {3, 1}, {14, 1} ), Add Alias Term( {3, 1}, {15, 1} ),
	Add Alias Term( {4, 1}, {5, 1} ), Add Alias Term( {4, 1}, {6, 1} ),
	Add Alias Term( {4, 1}, {7, 1} ), Add Alias Term( {4, 1}, {8, 1} ),
	Add Alias Term( {4, 1}, {9, 1} ), Add Alias Term( {4, 1}, {10, 1} ),
	Add Alias Term( {4, 1}, {11, 1} ), Add Alias Term( {4, 1}, {12, 1} ),
	Add Alias Term( {4, 1}, {13, 1} ), Add Alias Term( {4, 1}, {14, 1} ),
	Add Alias Term( {4, 1}, {15, 1} ), Add Alias Term( {5, 1}, {6, 1} ),
	Add Alias Term( {5, 1}, {7, 1} ), Add Alias Term( {5, 1}, {8, 1} ),
	Add Alias Term( {5, 1}, {9, 1} ), Add Alias Term( {5, 1}, {10, 1} ),
	Add Alias Term( {5, 1}, {11, 1} ), Add Alias Term( {5, 1}, {12, 1} ),
	Add Alias Term( {5, 1}, {13, 1} ), Add Alias Term( {5, 1}, {14, 1} ),
	Add Alias Term( {5, 1}, {15, 1} ), Add Alias Term( {6, 1}, {7, 1} ),
	Add Alias Term( {6, 1}, {8, 1} ), Add Alias Term( {6, 1}, {9, 1} ),
	Add Alias Term( {6, 1}, {10, 1} ), Add Alias Term( {6, 1}, {11, 1} ),
	Add Alias Term( {6, 1}, {12, 1} ), Add Alias Term( {6, 1}, {13, 1} ),
	Add Alias Term( {6, 1}, {14, 1} ), Add Alias Term( {6, 1}, {15, 1} ),
	Add Alias Term( {7, 1}, {8, 1} ), Add Alias Term( {7, 1}, {9, 1} ),
	Add Alias Term( {7, 1}, {10, 1} ), Add Alias Term( {7, 1}, {11, 1} ),
	Add Alias Term( {7, 1}, {12, 1} ), Add Alias Term( {7, 1}, {13, 1} ),
	Add Alias Term( {7, 1}, {14, 1} ), Add Alias Term( {7, 1}, {15, 1} ),
	Add Alias Term( {8, 1}, {9, 1} ), Add Alias Term( {8, 1}, {10, 1} ),
	Add Alias Term( {8, 1}, {11, 1} ), Add Alias Term( {8, 1}, {12, 1} ),
	Add Alias Term( {8, 1}, {13, 1} ), Add Alias Term( {8, 1}, {14, 1} ),
	Add Alias Term( {8, 1}, {15, 1} ), Add Alias Term( {9, 1}, {10, 1} ),
	Add Alias Term( {9, 1}, {11, 1} ), Add Alias Term( {9, 1}, {12, 1} ),
	Add Alias Term( {9, 1}, {13, 1} ), Add Alias Term( {9, 1}, {14, 1} ),
	Add Alias Term( {9, 1}, {15, 1} ), Add Alias Term( {10, 1}, {11, 1} ),
	Add Alias Term( {10, 1}, {12, 1} ), Add Alias Term( {10, 1}, {13, 1} ),
	Add Alias Term( {10, 1}, {14, 1} ), Add Alias Term( {10, 1}, {15, 1} ),
	Add Alias Term( {11, 1}, {12, 1} ), Add Alias Term( {11, 1}, {13, 1} ),
	Add Alias Term( {11, 1}, {14, 1} ), Add Alias Term( {11, 1}, {15, 1} ),
	Add Alias Term( {12, 1}, {13, 1} ), Add Alias Term( {12, 1}, {14, 1} ),
	Add Alias Term( {12, 1}, {15, 1} ), Add Alias Term( {13, 1}, {14, 1} ),
	Add Alias Term( {13, 1}, {15, 1} ), Add Alias Term( {14, 1}, {15, 1} ),
	Set Sample Size( 105 ), Simulate Responses( 0 ), Save X Matrix( 0 ), Make Design
	}
);

 

Since ingredients from group G have a very low concentration compared to other ingredients groups, one workaround may be to consider these ingredients as continuous factors in order to introduce your constraint 4 (not yet tested, will try later when I will have more time).

These are just some inputs to get to know your topic better, so that other members can join the discussions and provide relevant ideas.

 

Victor GUILLER

"It is not unusual for a well-designed experiment to analyze itself" (Box, Hunter and Hunter)
angela
Level II

Re: How to create mixture DOEs with several ingredient groups?

 Thanks! This is actually easier than I thought. It makes sense to me to include all the factors in the initial design as this way we won't miss the interactions between any ingredients. 

Re: How to create mixture DOEs with several ingredient groups?

I arrived at the same solution as @Victor_G. This experiment does not require a 'mixture of mixtures' design. You have constraints for several sub-groups of components. (There is a mistake on the lower bound of the last constraint. It should be 0.001, not 0.01.)

 

What is the reason for requirement 4? Is it a physical or chemical limitation or impossibility? If so, then more constraints are required. Is it instead a desire to not use multiple gums? If so, then I would not introduce that requirement into the design of the experiment but return to it during the optimization of the formulation once you fit an acceptable model.

angela
Level II

Re: How to create mixture DOEs with several ingredient groups?

It is a good question for requirement 4. I need to confirm with our product developer. I believe it is a chemical limitation. I will see if we can leave out that requirement for now.

Victor_G
Super User

Re: How to create mixture DOEs with several ingredient groups?

@Mark_Bailey : Good catch for the lower limit mistake for group G, I also noticed my (other) mistake for the same group and the upper limit at 1,5% that should be 0,015 (and not 0,15 in the original script provided).

I will correct my post taggued as "solution" in order to correct the script with the correct values for the limit of group G (and provide a correct datatable attached with these corrected limits).

@angela : Please take note that this response doesn't take into consideration your constraint 4, as already mentioned in the original post I made. 
But I agree with @Mark_Bailey, if the experiments are possible and response(s) can be measured (no stability problem or anything), then it might be better to keep an open mind and play with the constraints directly on the model profiler, see if you're able to reach an optimum by adding a new constraint on the ratio/number of components in group G.

Victor GUILLER

"It is not unusual for a well-designed experiment to analyze itself" (Box, Hunter and Hunter)
statman
Super User

Re: How to create mixture DOEs with several ingredient groups?

Here are my thoughts/questions.  It matters what you want to accomplish in the experiment (where is this in the series of experiments?).  What questions are you trying to answer?  Do you have a model in mind? Are you trying to build an understanding of the mechanisms at work or are you trying to pick a winning formulation?  Do you understand noise (e.g., measurement error, batch-to-batch and within batch variation of the ingredients, process factor variation (e.g., mix time, agitation speed), water quality, ambient conditions, etc.)?  It doesn't do much good to optimize a formulation when you don't understand noise (you could say it was great, yesterday...)

1. Are you interested in screening and identifying an appropriate design space to do further optimization?  If so, I question why you need more than 2 extreme levels for the factors.  

2. What interactions are predicted and why (hypotheses)?  If you were to predict and rank order possible effects, where would higher order effects fall (e.g., interactions or non-linear)?

3. How were the ranges established?  What experimentation has been done already to confirm these ranges?

4. What are the response variables?  Do they adequately quantify the "performance" of the formulation?  Are the measurements systems adequate?

 

My advice is always to design multiple experiments, delineate what you could possibly learn from each one (this is enhanced by predicting every possible outcome), compare this potential knowledge gain with the cost/resources to get that knowledge.  The pick one and be prepared to iterate.

"All models are wrong, some are useful" G.E.P. Box
angela
Level II

Re: How to create mixture DOEs with several ingredient groups?

Thank you, Statman. These are a good checklist for any DoE projects. We are planning do to multiple experiments. Initially we try to have a good understanding of the mechanisms, followed by optimized formula and flex formulas to deal with supply issues. I thought we have good knowledge on the noise factors, but probably need further clarification. Your questions reminded me to double check the ranges established. We took them for granted, but they may not be all established on the solid ground.