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

  1. 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)];
  1. 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
  1. Graficamos los vectores peaks(variable dependiente) vs C(variable independiente)
figure
plot(C,peaks,'o')

¿Qué tendencia muestran los datos?

  1. De acuerdo con tu respuesta a la pregunta anterior, podemos obtener una función de transferencia que describa la relación peaks vs C.
    • 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.

  1. 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 vs C 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.