Introduction

In this analysis, we aim to explore the effects of a mixture of gases on the response variable, deposition rate, in a semiconductor experiment. The gases include SiH4, NH3, He, and O2. We are particularly interested in the proportions of SiH4 and NH3. Additionally, we are studying the effects of two continuous variables, RF power and pressure.

This experiment employs a mixture design with fixed sum constraints, where the total flow rate of the gases is set to 2000 sccm. Using a D-optimal design, we aim to maximize information while minimizing the number of experimental runs.

Libraries and Setup

We start by loading the necessary libraries and setting up the mixture and continuous factors.

# Install and load required packages if not already installed
if (!require("ggtern")) install.packages("ggtern", dependencies=TRUE)
if (!require("ggplot2")) install.packages("ggplot2", dependencies=TRUE)
if (!require("dplyr")) install.packages("dplyr", dependencies=TRUE)
if (!require("mixexp")) install.packages("mixexp", dependencies=TRUE)
if (!require("AlgDesign")) install.packages("AlgDesign", dependencies=TRUE)

# Load libraries
library(ggtern)
library(ggplot2)
library(dplyr)
library(mixexp)
library(AlgDesign)

Generating the Mixture Design

We use the mixexp package to set up a simplex lattice design for a 3-component mixture (SiH4, NH3, and O2_He). The mixture components are scaled to a total flow rate of 2000 sccm.

# Create simplex lattice design and scale to 2000 sccm
mixture_design <- SLD(3, 2)  # A 3-component, 2nd-degree simplex lattice design
colnames(mixture_design) <- c("SiH4", "NH3", "O2_He")
mixture_design <- as.data.frame(mixture_design) * 2000

Adding Continuous Factors

We create a grid of values for the continuous factors RF power (150-300 W) and Pressure (50-200 mT), and combine this with the mixture design to create a full factorial design.

# Define continuous factors and combine with mixture design
continuous_factors <- expand.grid(RF_power = seq(150, 300, length.out = 3),
                                  Pressure = seq(50, 200, length.out = 3))
full_design <- merge(mixture_design, continuous_factors)
full_design
##    SiH4  NH3 O2_He RF_power Pressure
## 1  2000    0     0      150       50
## 2  1000 1000     0      150       50
## 3     0 2000     0      150       50
## 4  1000    0  1000      150       50
## 5     0 1000  1000      150       50
## 6     0    0  2000      150       50
## 7  2000    0     0      225       50
## 8  1000 1000     0      225       50
## 9     0 2000     0      225       50
## 10 1000    0  1000      225       50
## 11    0 1000  1000      225       50
## 12    0    0  2000      225       50
## 13 2000    0     0      300       50
## 14 1000 1000     0      300       50
## 15    0 2000     0      300       50
## 16 1000    0  1000      300       50
## 17    0 1000  1000      300       50
## 18    0    0  2000      300       50
## 19 2000    0     0      150      125
## 20 1000 1000     0      150      125
## 21    0 2000     0      150      125
## 22 1000    0  1000      150      125
## 23    0 1000  1000      150      125
## 24    0    0  2000      150      125
## 25 2000    0     0      225      125
## 26 1000 1000     0      225      125
## 27    0 2000     0      225      125
## 28 1000    0  1000      225      125
## 29    0 1000  1000      225      125
## 30    0    0  2000      225      125
## 31 2000    0     0      300      125
## 32 1000 1000     0      300      125
## 33    0 2000     0      300      125
## 34 1000    0  1000      300      125
## 35    0 1000  1000      300      125
## 36    0    0  2000      300      125
## 37 2000    0     0      150      200
## 38 1000 1000     0      150      200
## 39    0 2000     0      150      200
## 40 1000    0  1000      150      200
## 41    0 1000  1000      150      200
## 42    0    0  2000      150      200
## 43 2000    0     0      225      200
## 44 1000 1000     0      225      200
## 45    0 2000     0      225      200
## 46 1000    0  1000      225      200
## 47    0 1000  1000      225      200
## 48    0    0  2000      225      200
## 49 2000    0     0      300      200
## 50 1000 1000     0      300      200
## 51    0 2000     0      300      200
## 52 1000    0  1000      300      200
## 53    0 1000  1000      300      200
## 54    0    0  2000      300      200

Generating a D-Optimal Design

To reduce the number of experimental runs, we use the AlgDesign package to create a D-optimal design, selecting a subset of trials that maximizes information.

# Create a D-optimal design from the full factorial design
optimal_design <- optFederov(~ NH3 + O2_He + RF_power + Pressure, data = full_design, nTrials = 20)
optimal_design
## $D
## [1] 6447.735
## 
## $A
## [1] 3.501311
## 
## $Ge
## [1] 0.774
## 
## $Dea
## [1] 0.746
## 
## $design
##    SiH4  NH3 O2_He RF_power Pressure
## 1  2000    0     0      150       50
## 3     0 2000     0      150       50
## 5     0 1000  1000      150       50
## 6     0    0  2000      150       50
## 7  2000    0     0      225       50
## 13 2000    0     0      300       50
## 15    0 2000     0      300       50
## 18    0    0  2000      300       50
## 24    0    0  2000      150      125
## 31 2000    0     0      300      125
## 33    0 2000     0      300      125
## 37 2000    0     0      150      200
## 38 1000 1000     0      150      200
## 39    0 2000     0      150      200
## 42    0    0  2000      150      200
## 45    0 2000     0      225      200
## 48    0    0  2000      225      200
## 49 2000    0     0      300      200
## 51    0 2000     0      300      200
## 54    0    0  2000      300      200
## 
## $rows
##  [1]  1  3  5  6  7 13 15 18 24 31 33 37 38 39 42 45 48 49 51 54

Adding Dummy Response Data

We add dummy response data to simulate experimental results.

# Add dummy response data for analysis
set.seed(42)
optimal_design$design$Response <- rnorm(n = nrow(optimal_design$design), mean = 100, sd = 10)

Performing ANOVA

We fit a linear model with main effects and interactions, and conduct an ANOVA to analyze the significance of each factor.

# Perform ANOVA on the D-optimal design
anova_model <- lm(Response ~ NH3 + O2_He + RF_power + Pressure + NH3:RF_power + O2_He:Pressure, 
                  data = optimal_design$design)
anova_results <- anova(anova_model)
anova_results
## Analysis of Variance Table
## 
## Response: Response
##                Df  Sum Sq Mean Sq F value Pr(>F)
## NH3             1   70.35   70.35  0.4095 0.5333
## O2_He           1   76.81   76.81  0.4471 0.5154
## RF_power        1  132.89  132.89  0.7735 0.3951
## Pressure        1  258.43  258.43  1.5043 0.2418
## NH3:RF_power    1  386.88  386.88  2.2520 0.1573
## O2_He:Pressure  1  115.04  115.04  0.6696 0.4279
## Residuals      13 2233.29  171.79

Model Summary

For further details on the model fit, we can review the model summary.

summary(anova_model)
## 
## Call:
## lm(formula = Response ~ NH3 + O2_He + RF_power + Pressure + NH3:RF_power + 
##     O2_He:Pressure, data = optimal_design$design)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -21.9931  -7.1919  -0.8348   7.6711  20.3920 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     1.315e+02  1.536e+01   8.562 1.05e-06 ***
## NH3            -1.690e-02  1.200e-02  -1.408    0.183    
## O2_He          -3.407e-03  7.312e-03  -0.466    0.649    
## RF_power       -9.117e-02  5.513e-02  -1.654    0.122    
## Pressure       -7.682e-02  5.295e-02  -1.451    0.171    
## NH3:RF_power    7.098e-05  4.813e-05   1.475    0.164    
## O2_He:Pressure  3.920e-05  4.790e-05   0.818    0.428    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 13.11 on 13 degrees of freedom
## Multiple R-squared:  0.3178, Adjusted R-squared:  0.002946 
## F-statistic: 1.009 on 6 and 13 DF,  p-value: 0.4602

Visualization of the Mixture Space

Finally, we create a ternary plot of the mixture space, with color and size representing RF power and pressure levels.

# Visualize the mixture space with ggtern
ggtern(optimal_design$design, aes(x = SiH4, y = NH3, z = O2_He, color = RF_power, size = Pressure)) +
  geom_point(alpha = 0.6) +
  scale_color_gradient(low = "blue", high = "red") +
  labs(title = "Mixture Design with Continuous Factors",
       x = "SiH4 Flow (sccm)", y = "NH3 Flow (sccm)", z = "O2 and He Flow (sccm)",
       color = "RF Power (W)",
       size = "Pressure (mT)") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Conclusion

This analysis demonstrates a mixture design with additional continuous factors in a semiconductor experiment. Using D-optimal design, we efficiently reduced the number of trials while preserving critical information about the effects of each factor on the response variable. The ANOVA results help us understand which factors are significant, and the ternary plot provides a visual representation of the mixture space.