Hello,
Thanks for the details on your setup. I'll keep this concise, focusing on standard dPCR practices (e.g., per dMIQE guidelines).
Threshold Setting
Yes, set a global threshold based on NTC or internal negative controls—place it just above the negative cluster in the NTC to separate signal from noise. Avoid per-sample thresholds; use controls for consistency across wells. If software auto-varies them, switch to manual mode and check for issues like matrix effects or contamination.
Positive Calls
For presence/absence, require at least 3 positive partitions for a confident positive (to exceed false-positive risk per Poisson stats). A single positive is often ambiguous—treat as negative or re-test, especially if NTCs are clean.
Example R Analysis Code
If you're analyzing raw partition data (e.g., fluorescence amplitudes), use the dpcR package in R for thresholding and calling. Install via install.packages("dpcR") if needed. Here's a basic script assuming you have a CSV with columns: sample_id, partition_id, amplitude.
library(dpcR)
# Load your data (replace with your file)
data <- read.csv("your_dPCR_data.csv")
# Subset NTC for threshold estimation
ntc_data <- data[data$sample_id == "NTC", "amplitude"]
# Set threshold as mean + 3*SD of NTC negatives (adjust as needed)
threshold <- mean(ntc_data) + 3 * sd(ntc_data)
# Apply to all samples and count positives
data$positive <- data$amplitude > threshold
positives_per_sample <- aggregate(positive ~ sample_id, data, sum)
# Print results; e.g., call positive if >=3
print(positives_per_sample)
positives_per_sample$call <- ifelse(positives_per_sample$positive >= 3, "Positive", "Negative")
# For Poisson-based confidence, use built-in functions
poisson_test(positives_per_sample$positive[1], total_partitions = nrow(data[data$sample_id == unique(data$sample_id)[1], ]))
Adapt this to your platform's output (e.g., QuantStudio exports). For more advanced fits, check ddpcr package too.
Kevin