«

»

Dec
21

FDA Validation of a PCR Test: Reportable Range

The Reportable Range plan validates the test under many different conditions. 3 RNA input levels (low, medium, high) and the target at 12 different concentrations, ranging from 0.0488% to 100%. By testing 36 different conditions (12*3), we’ll get:

  1. Summary statistics for each fusion concentration and RNA input level
  2. Amplification efficiencies at the different % fusion concentrations
  3. Relationships between:
    1. Texas Red Ct and RNA Input Level (should be positively correlated)
    2. FAM and Texas Red Ct Values (should be positively correlated)
    3. ∆Ct and Texas Red Ct Values (should not be correlated)
    4. FAM Ct and % Fusion Concentration (should be negatively correlated)
    5. TxRd Ct and % Fusion Concentration (should not be correlated)
    6. ∆Ct Value and % Fusion Concentration(should be negatively correlated)
  4. Multiple Linear Regression

Many relationships between x and y being tested; this is to make sure the assay is behaving as expected.

1. Summary statistics for each fusion concentration and RNA input level
For the summary statistics, we’ll just use the summary_function as described in a previous post. The summary_function prints out the common metrics like average, median, std dev, percentiles, etc.

2. Amplification efficiencies at the different % fusion concentrations

The amplification efficiency for the reaction is calculated using the formula:
Amplification Efficiency = (10 ^ (-1 / slope)) -1, (^ denotes “to the power of”).

This is our R function (because we are going to pass in different linear models based on RNA input or fusion concentration:

calc_amplification_efficiency <- function (lm) {
slope <- lm$coefficients[2]
amplification_efficiency <- (10 ^ (-1 / slope)) -1
return (amplification_efficiency)
}

all.lm <- lm (FAM.Cq ~ log10(Fusion_Concentration), data=channels)
print (calc_amplification_efficiency (all.lm))

Ideally your amplification efficiency is close to 1.

3. Relationships Between Two Variables
In this section, we fit a lot of linear regressions to check that the data behaves as expected. We generate a lot of plots, but it's really the slope of the linear regression that tells us whether the data behaves as expected.

Since we're looking at so many variables, a for-loop was necessary. This is a for-loop that looks at each concentration across the different measures (FAM, ΔCt, etc).

params_to_plot = c("deltaCq", "FAM.Cq", "Target_PTPRK_Ct")
conc <- c(100, 50, 25, 12.5, 6.25, 3.125, 1.563, .7810, .3906 , .1953, .0977, 0.0488 )

for (param in params) {
for (fus_conc in conc) {
subset_df = channels[channels$Fusion_Concentration == fus_conc,]
subset_df.lm <- lm ( eval (parse( text=param)) ~ TexasRed.Cq, data=subset_df)
confidence_interval <- predict (subset_df.lm, interval='confidence', level=0.95)
print (c("% fusion", fus_conc) )
print (coef (subset_df.lm))
print (confint(subset_df.lm, 'TexasRed.Cq', level=0.95))
}
}

Here are the linear regressions between FAM and Texas Red at various concentrations:

% ConcentrationInterceptSlope95% Confidence Interval around Slope
1001.490.94(0.91, 0.98)
501.530.99(0.95, 1.01)  
252.221(0.93, 1.06)
12.53.590.99(0.92, 1.04)
6.255.330.95(0.89, 1.01)
3.1254.041.06(0.97, 1.14)
1.56256.930.99(0.85, 1.12)
0.781253.961.17(0.96, 1.39)
0.39069.461.02(0.75, 1.30)
0.195318.670.72(0.16, 1.27)
0.097710.661.15(-0.52, 2.83)
0.048851.82-0.48(-25.19, 24.23)

The corresponding figure is below:

FAM Ct and Texas Red Ct Values

At higher concentrations, the slope is close to 1 so there is a strong correlation, but the slope deviates from 1 at lower concentrations.

Another for-loop in the code generates a whole lot of graphs...

Texas Red Ct and RNA Input Level

∆Ct and % Fusion Concentration

FAM Ct and % Fusion Concentration

Texas Red Ct and % Fusion Concentration

4. Multiple Linear Regression
This multiple linear regression has Texas Red and the fusion concentration as dependent variables.

mult.lin.regression <- lm (formula = deltaCq ~ TexasRed.Cq + log2(Fusion_Concentration) , data=channels)
summary (mult.lin.regression)
confint(mult.lin.regression, level=0.95)

∆Ct should not depend on the RNA input level (Texas Red Cq), so the coefficient should be close to or approximately 0, indicating that there was little relationship between ∆Ct and RNA input level. If the coefficient for log2 (% fusion) is large coefficient, this means % fusion concentration can predict ΔCt.