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.
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)
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
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
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
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)
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
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
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))
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.