1 Introducción

Autor: Álvaro Alonso Fernández
Departamento de Ciencias de la Vida
Universidad de Alcalá (España)

Esto es fácil, no te preocupes….


Vamos a aprender a calcular la CL50. La CL₅₀ (concentración letal media) es el valor que indica la concentración de una sustancia que causa la muerte del 50% de los organismos expuestos durante un tiempo determinado. Es una medida muy utilizada en ecotoxicología para evaluar la toxicidad aguda de productos químicos, contaminantes o fármacos sobre diferentes especies. Este parámetro permite comparar la sensibilidad entre organismos y estimar los riesgos potenciales que una sustancia puede tener en el ambiente. Cuanto menor es la CL₅₀, mayor es la toxicidad. Su uso ayuda a establecer límites seguros y a proteger los ecosistemas acuáticos y terrestres de los efectos dañinos de los contaminantes.

2 Nuestros datos

Vamos a calcular la CL50 a partir de una hoja Excel con nuestros resultados. Se muestra una variable con la concentración concentration de tóxico utilizada, otra con el número de organismos muertos dead, otra con el total total de organismos que se pusieron al principio del estudio y otra con el porcentaje de mortalidad porcent_mortality al final del estudio. En este caso ha durado 96h, luego la CL50 calculada será a 96h de exposición al tóxico.

Veamos como son nuestros datos:

#Fijamos el directorio de trabajo
setwd(dir = "G:/R/MARKDOWN/cl50")

#leemos el fichero de datos, con cada valor separado por ;
cl50<-read.csv("results.csv", sep=";")
str(cl50)
## 'data.frame':    21 obs. of  5 variables:
##  $ concentration    : num  0 0 0 1.1 1.1 1.11 2.01 2.04 2.05 3.1 ...
##  $ replicate        : int  1 2 3 1 2 3 1 2 3 1 ...
##  $ dead             : int  0 0 1 0 2 3 2 3 4 5 ...
##  $ total            : int  10 10 10 10 10 10 10 10 10 10 ...
##  $ percent_mortality: int  0 0 10 0 20 30 20 30 40 50 ...
head(cl50)
##   concentration replicate dead total percent_mortality
## 1          0.00         1    0    10                 0
## 2          0.00         2    0    10                 0
## 3          0.00         3    1    10                10
## 4          1.10         1    0    10                 0
## 5          1.10         2    2    10                20
## 6          1.11         3    3    10                30
#Transformamos en variables numéricas:
cl50$dead <- as.numeric(cl50$dead) 
cl50$total <- as.numeric(cl50$total) 
str (cl50)
## 'data.frame':    21 obs. of  5 variables:
##  $ concentration    : num  0 0 0 1.1 1.1 1.11 2.01 2.04 2.05 3.1 ...
##  $ replicate        : int  1 2 3 1 2 3 1 2 3 1 ...
##  $ dead             : num  0 0 1 0 2 3 2 3 4 5 ...
##  $ total            : num  10 10 10 10 10 10 10 10 10 10 ...
##  $ percent_mortality: int  0 0 10 0 20 30 20 30 40 50 ...

3 Cargamos el paquete necesario

Cargamos drc: (en caso de no tenerlo antes hay que instalarlo con install.packages("drc"))

library(drc)
## Warning: package 'drc' was built under R version 4.4.3
## Cargando paquete requerido: MASS
## 
## 'drc' has been loaded.
## Please cite R and 'drc' if used for a publication,
## for references type 'citation()' and 'citation('drc')'.
## 
## Adjuntando el paquete: 'drc'
## The following objects are masked from 'package:stats':
## 
##     gaussian, getInitial

4 Calculamos la CL50 y sus límites

Esta línea ajusta un modelo matemático para calcular la CL₅₀ a partir de los datos experimentales. La función drm() pertenece al paquete drc y se usa para analizar relaciones dosis–respuesta. En el modelo, dead/total representa la proporción de organismos muertos, y concentration es la dosis o concentración del tóxico. El argumento weights = total indica que cada valor se pondera según el número total de individuos probados. El parámetro data = cl50 señala el conjunto de datos usado, y fct = LL.2() especifica que se ajustará un modelo log-logístico de dos parámetros, común en toxicología para estimar la CL₅₀.

modelo <- drm(dead/total ~ concentration, weights = total,
              data = cl50, fct = LL.2())

summary(modelo)
## 
## Model fitted: Log-logistic (ED50 as parameter) with lower limit at 0 and upper limit at 1 (2 parms)
## 
## Parameter estimates:
## 
##               Estimate Std. Error t-value   p-value    
## b:(Intercept) -2.83710    0.40367 -7.0282 1.085e-06 ***
## e:(Intercept)  2.55840    0.13888 18.4214 1.412e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error:
## 
##  0.9403143 (19 degrees of freedom)
ED(modelo, 50, interval = "delta")
## 
## Estimated effective doses
## 
##        Estimate Std. Error   Lower   Upper
## e:1:50  2.55840    0.13888 2.26771 2.84908

Nuestro resultado es una CL50 de 2.56 mg/l de tóxico con unos límites de 2.27 (inferior) y 2.85 (superior). Es dcir, nuestra CL50 se encuentra con una probabilidad del 95% entre esos dos valores. Ya hemos calculado la CL50, coo dije al principio no es tan difícil.

5 CRÉDITOS

Álvaro Alonso Fernández

Departamento de Ciencias de la Vida

Universidad de Alcalá (España)