Tutorial 1: Caracterización de un biosensor - rgunam/Biosens_Bioelectron GitHub Wiki
Objetivo
Comprender, de forma práctica, los conceptos fundamentales de un biosensor:
- Curva de calibración
- Sensibilidad
- Límite de detección
Planteamiento del problema:
Se tiene un biosensor para conteo celular cuyo mecanismo de transducción se basa en la medición de impedancia eléctrica. Como resultado, el biosensor arroja una función de distribución, cuyos valores pico (o máximos) están relacionados con el numero de células en un electrolito. Obtener la caracterización del sensor.
Paso 1: Datos de mediciones
Las mediciones se encuentran en el siguiente archivo, descargar Aquí.
El archivo es una hoja de cálculo con extensión .xlsx. con la siguiente estructura:
En donde la primera columna corresponde a la frecuencia de un campo eléctrico aplicado, mientras que las columnas restantes Z1,Z2,...,Z7 corresponden a 7 mediciones de impedancia, en cada frecuencia de la columna 1, y cada columna está asociada a una concentración diferente de células de acuerdo con la siguiente tabla:
Es decir, cada columna corresponde a una medición en un intervalo de frecuencias, para cada concentración.
Paso 2: Análisis visual de los datos
Para graficar leer los datos de las mediciones y graficarlos, podemos leer el archivo de mediciones con el siguiente código de MATLAB
clear all
close all
clc
% Lee datos de una hoja de cálculo
data = readtable('data_Z_Biosens.xlsx');
%Extrae la primera columa directamente con el encabezado de la hoja de
%cálculo (Frecuencia) y almacena en la variable frec
frec=data.Frecuencia;
%Extrae las columnas subsecuentes de acuerdo con el encabezado de la hoja
% de cálculo
Z1 = data.Z1;
Z2 = data.Z2;
Z3 = data.Z3;
Z4 = data.Z4;
Z5 = data.Z5;
Z6 = data.Z6;
Z7 = data.Z7;
%Grafica los datos
figure
semilogx(frec,Z1)
hold on
semilogx(frec,Z2)
semilogx(frec,Z3)
semilogx(frec,Z4)
semilogx(frec,Z5)
semilogx(frec,Z6)
semilogx(frec,Z7)
ylabel('Z (\Omega)')
xlabel('\tau (s)')
legend('1500', '1200', '900', '700', '500', '250','0');
Como resultado obtendremos una gráfica similar a la siguiente
En donde, es posible observar como la magnitud de la impedancia (eje vertical) disminuye como función del número de células.
Paso 3: Curva de calibración
- Primero, es necesario trabajar con las variables del fragmento de código anterior, para obtener el valor pico o máximo de cada medición de impedancia. En MATLAB, podemos realizarlo con el siguiente comando
max(Z1);
En donde la variable max_Z1
almacena el valor pico de la medición Z1. Entonces, es necesario realizar lo mismo para las 6 mediciones restantes, y almacenar los resultados en un vector peaks
con 7 elementos max(Zx)
en donde x
es un número del 1 al 7.
peaks = [max(Z1) ... max(Z7)];
- Ahora, es necesario construir un vector
C
que contenga la concentración de células de la siguiente manera
C = [1500; 1300; 1200; 1000; 800; 600; 0]; %vector columna
- Graficamos los vectores
peaks
(variable dependiente) vsC
(variable independiente)
figure
plot(C,peaks,'o')
¿Qué tendencia muestran los datos?
- De acuerdo con tu respuesta a la pregunta anterior, podemos obtener una función de transferencia que describa la relación
peaks
vsC
.- Opción 1: Ajusta los datos a un polinomio de segundo grado.
La función para hacerlo en Matlab es
[y_pred_nonlin,stats_nonlin] = fit(C,peaks,'poly2'); %y_pred_nonlin => función ajustada ; stas_nonlin => resultados (R^2, SSE, RMSE)
% coeficientes del polinomio
b1 = y_pred_nonlin.p1;
b2 = y_pred_nonlin.p2;
b3 = y_pred_nonlin.p3;
- Opción 2: Ajusta los datos a un polinomio de primer grado.
La función para hacerlo en Matlab es
[y_pred_lin,stats_lin] = fit(C,peaks,'poly1');%y_pred_lin => función ajustada ; stas_lin => resultados (R^2, SSE, RMSE)
m = y_pred_lin.p1; %pendiente
b = y_pred_lin.p2; %ordenada al origen
¿Cuál de las opciones anteriores describe mejor a los datos?
¿Qué variable nos permite cuantificar lo anterior?
Anota el valor de dicha variable para ambos casos. (Para obtenerlo ejecuta, p.ejemplo: stats_lin.sse);
Obtén, para cada caso, en una misma figura la gráfica de los datos peaks
vs C
y del polinomio de ajuste.
- Verificando el punto anterior, es claro que todo el conjunto de datos no puede ser correctamente representado por una función de transferencia lineal. Por ello, podemos acotar el rango de los datos y trabajar sobre una región lineal. Entonces, cambia el contenido de los vectores
peaks
vsC
tal que la concentración de 0 células ya no esté presente.
Repite el paso 4, pero solo considerando la Opción 2.
Paso 4: Sensibilidad
Con el punto 5 del Paso anterior, calcula la sensibilidad del sensor (i.e. solo para el rango lineal).
Recuerda que la sensibilidad tiene unidades de variable dependiente/variable independiente.
Paso 6: Limite de Detección (LOD)
Con la curva de calibración (solo para el rango lineal), calcula el límite de detección del sensor.
Para calcularlo debes obtener la desviación estándar de la regresión dada por el siguiente fragmento de código
alpha = 0.95; % 95% para intervalos de confianza
ci = confint(y_pred_lin, alpha); %Intervalos de confianza al 95%
t = tinv((1+alpha)/2, stats_lin.dfe); %distribución normal
se = (ci(2,:)-ci(1,:)) ./ (2*t) % Desviación estándar ó Error estándar
Finalmente, para obtener el LOD es necesario emplear la siguiente ecuación
donde m es la pendiente de la curva de calibración y sigma e es el valor se
calculado anteriormente.
¿Qué unidades tiene el LoD?
ACTIVIDAD
Seguir el tutorial paso a paso, responder a las preguntas planteadas, y obtener las gráficas y cálculos solicitados. Incluir todo en un solo documento .pdf incluyendo los puntos anteriores y discutiendo todos los resultados de forma clara y concisa.
Fecha de entrega: Lunes 8 de marzo de 2021, a través de la plataforma Teams.