domingo, 9 de marzo de 2014

El xilema vegetal: un posible potabilizador barato de agua

Acaba de publicarse en PLoS ONE el artículo Boutilier MSH, Lee J, Chambers V, Venkatesh V, Karnik R (2014) Water Filtration Using Plant Xylem.PLoS ONE 9(2):e89934. doi: 10.1371/journal.pone.008993 donde los autores exponen un experimento con fragmentos de ramas del pino Pinus strobus L. a través de los cuales se hace pasar un flujo de agua cargado con la bacteria Escherichia coli (Migula 1895) Castellani and Chalmers 1919. Al final, intentan comprobar la cantidad de E. coli que retienen los fragmentos de pino.

El xilema de las plantas es el conjunto de conductos que llevan el agua y los nutrientes que absorben las raices -la llamada savia bruta- hasta los tejidos fotosintéticos para que sirvan de sustrato para la síntesis de azúcares mediante la fotosíntesis. Posteriormente otro conjunto de conductos, el floema, redistribuirá los productos de la fotosíntesis al resto de la planta. Resulta que los conductos del xilema tienen una red de poros llamados traqueidas por donde corre el flujo de la savia de unos a otros, y estas traqueidas actúan como una especie de filtro donde pudieran quedar atrapados, por ejemplo, patógenos que afecten al ser humano, pudiendo obtener una agua libre de ellos, es decir, una potabilización de la misma.

Figure 1. Xylem structure.
a) Structure of xylem vessels in flowering plants and tracheids in conifers. Longer length of the vessels can provide pathways that can bypass filtration through pit membranes that decorate their circumference. b) Photograph of ~1 cm diameter pine (pinus strobus) branch used in the present study. c) Scanning electron microscope (SEM) image of cut section showing tracheid cross section and lengthwise profile. Scale bar is 40 µm. d) SEM image showing pits and pit membranes. Scale bar is 20 µm. e) Pit membrane with inset showing a cartoon of the pit cross-section. The pit cover has been sliced away to reveal the permeable margo surrounding the impermeable torus. Arrow indicates observed hole-like structures that may be defects. The margo comprises radial spoke-like structures that suspend the torus, which are only barely visible overlaying the cell wall in the background. Scale bar is 1 µm. f) Dependence of area amplification, defined as the pit membrane area divided by the nominal filter area, on the tracheid aspect ratio L/D and fractional area α occupied by pit membranes.
doi:10.1371/journal.pone.0089934.g001
Pero toda esta posibilidad hay que probarla, ver qué presiones de agua son las adecuadas, qué cantidad de patógenos se retienen, si las traqueidas se saturan, etc., y esto es lo que han hecho Boutilier y colaboradores en una primera aproximación solo con E. coli, una bacteria muy común en los sistemas digestivos de los mamíferos y cuya presencia en cantidades excesivas en agua provoca enfermedades en el ser humano. Así pues, construyeron unos filtros de ramas peladas de corteza de P. strobus metidos en tubos de plástico.

Figure 2: Xylem filter.
a) Construction of xylem filter. b) Effect of applied pressure on the water flux through the xylem filter. c) Hydrodynamic conductivity of the filter extracted at each measured pressure using the total filter cross-section area and thickness as defined by Equation 1. Error bars indicate ±S.D. for measurements on three different xylem filters.
doi:10.1371/journal.pone.0089934.g002

Y el resultado es que las traqueidas retuvieron casi la totalidad de E. coli contenida en el agua que se hizo pasar por estos filtros vegetales.

Figure 4: Filtration of model bacteria by the xylem filter.
a) Concentrations of bacteria in the feed and filtrate solutions. Inset shows fluorescence images of the two solutions. Scale bar is 200 µm. Error bars indicate ±S.D. for experiments performed on three different xylem filters. b) Fluorescence image of xylem filter cross-section showing accumulation of bacteria over the margo pit membranes. Scale bar is 20 µm. c) Low-magnification fluorescence image shows that bacteria are trapped at the bottoms of tracheids within the first few millimeters of the top surface. Scale bar is 400 µm. Arrow indicates top surface of the xylem filter and also the direction of flow during filtration. Autofluorescence of the xylem tissue also contributes to the fluorescence signal in (b) and (c). d), e) SEM images showing bacteria accumulated on the margo pit membranes after filtration. Scale bars are 10 µm and 2 µm, respectively.
doi:10.1371/journal.pone.0089934.g004

Evidentemente quedaría mucha investigación por hacer hasta hacer una realidad la utilización de filtros vegetales para potabilizar agua: pruebas con otros patógenos y sustancias y con otras especies vegetales, costes de la construcción de los filtros a gran escala, impactos sobre la flora por posible sobreexplotación de las especies vegetales susceptibles de servir como filtros,... Sin embargo, los resultados de este estudio pueden suponer un primer paso para conseguir un sistema potabilizador más barato que los utilizados actualmente, lo que podría resolver este gran problema en paises con escasos recursos y donde la contaminación del agua provoca enfermedades tan graves como la disentería. Habrá que estar atentos.

domingo, 8 de diciembre de 2013

Código R para diseccionar los efectos del ganado en una comunidad vegetal mediterránea

Como prometí, voy a ir intentando publicar en Muestra Aleatoria el código de R utilizado en los distintos análisis de nuestro último artículo publicado en PLoS ONE.

Sigo practicando con el paquete knitr y el lenguaje de marcado markdown, así que esta entrada la he hecho por entero en RStudio. Con ello quiero resaltar que algunos parámetros gráficos están adaptados para que salga bien en el blog y tendréis que cambiarlos seguramente para obtener otros resultados en los dispositivos que elijáis para dibujar en R.

Como los datos son míos y hago con ellos lo que quiera, tenéis las matrices colgadas en el servicio Google Drive. Luego, al ordenar a R leer los archivos, recordad cambiar las rutas de los mismos a las que tengan en vuestros equipos, claro:

  • Con_Sps_1 Este es el archivo con la matriz de coberturas de especies por tratamiento, parcela y año en formato CANOCO. Este análisis lo hice al principio con CANOCO y como el paquete vegan trae una función, read.cep (), para importar ficheros producidos por CANOCO, me decidí a hacerlo así para comparar resultados

  • names.csv Es el fichero con los nombres de las especies.

Y ahora vamos a ver cómo se hizo el análisis de Principal Response Curves:

library(vegan)  ##Cargamos el paquete vegan
## Loading required package: permute
## Loading required package: lattice
## This is vegan 2.0-9
sps.table <- read.cep("~/Documentos/UAM/Experimentos/Analisis_Cerro San Pedro/Sampling/CANOCO/Sin_Xolantha/Con_Sps_1_Con_Lavandula/Sin_Control/Con_Sps_1", 
    force = T)  ##Metemos en un objeto los datos de la matriz
log.sps.table <- log1p(sps.table)  ##Transformamos los datos a su logaritmo
center.log.sps.table <- scale(log.sps.table, scale = F)  ##Centramos por especies

## Definimos dos objetos con los factores de tratamiento y año con sus
## respectivas etiquetas

Treatment <- factor(rep(c("C", "D", "T", "F", "DT", "DF", "FT"), 28))
Year <- gl(4, 49, labels = c("2005", "2006", "2007", "2008"))

## Hacemos el análisis PRC

curves1 <- prc(center.log.sps.table, Treatment, Year)

Dibujamos, por un lado, la gráfica sin las especies, puesto que, por los distintos escalados, luego es más fácil dibujar el eje de las especies aparte con la función linestack y pegarlo a la gráfica de las curvas con otro programa para que sea de fácil interpretación.

plot(curves1, scaling = 1, species = F, ylim = c(-0.6, 0.6), xlim = c(2004.5, 
    2008.5), pch = c(1:2, 15:18), col = "black", type = "b", ylab = c("PRC"), 
    cex = 2, legpos = NA)
legend(0.55, 0.43, legend = levels(Treatment)[-1], pch = c(1, 2, 15, 16, 17, 
    18), ncol = 2, cex = 1.5)

plot of chunk PRCsites

Ahora, dibujamos el eje de las especies sin Lavandula stoechas subsp. pedunculata. Esto lo tenemos que hacer así debido a la puntuación tan alta de esta especie, lo que nos haría perder la perspectiva en la escala del eje. Luego dibujaremos a Lavandula sola y, con algún programa de tratamiento gráfico, haremos un corte en el eje y la introduciremos.

Por otro lado, vamos a elegir solo las especies con una puntuación en el eje mayor de 0.2 en valor absoluto, puesto que si no, nos quedaría demasiado abigarrada y no podríamos leer los nombres de las especies. Consideramos que las especies con una menor puntuación en el eje no son relevantes para definir los cambios en las comunidades.

sps.scores <- scores(curves1, scaling = 1, choices = 1, display = "sp")
names.tot <- read.csv("names.csv", header = F)
sps.names.sel <- names.tot[abs(sps.scores) > 0.2]
sps.scores.sel2 <- sps.scores[abs(sps.scores) > 0.2]
linestack(sps.scores.sel2[-18], labels = sps.names.sel[-18], axis = T, air = 1.3, 
    hoff = 6, at = -1, font = 3)

plot of chunk Sps

Ahora, dibujamos a Lavandula.

linestack(sps.scores.sel2[18], labels = sps.names.sel[18], axis = T, air = 1.3, 
    hoff = 6, at = -1, font = 3)

plot of chunk Lav

Y finalmente hacemos los test de significatividad de los ejes mediante permutaciones de MonteCarlo. Las razones de hacer el análisis del segundo eje de forma distinta las tenéis explicadas en un post anterior.

## Significación del primer eje

anova(curves1, strata = Year, first = T, perm.max = 499)
## Permutation test for rda under reduced model
## Permutations stratified within 'Year'
## 
## Model: prc(response = center.log.sps.table, treatment = Treatment, time = Year)
##           Df   Var    F N.Perm Pr(>F)   
## RDA1       1  2.31 13.4    199  0.005 **
## Residual 168 28.96                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Significación del segundo eje

SamE <- curves1$CCA$u
SamE <- SamE[, 1]
seconaxis <- rda(center.log.sps.table ~ Treatment * Year + Condition(Year) + 
    Condition(SamE))
anova(seconaxis, strata = Year, perm.max = 499, first = T)
## Permutation test for rda under reduced model
## Permutations stratified within 'Year'
## 
## Model: rda(formula = center.log.sps.table ~ Treatment * Year + Condition(Year) + Condition(SamE))
##           Df   Var    F N.Perm Pr(>F)
## RDA1       1  0.54 3.13     99   0.78
## Residual 168 28.96

Y ya está… bueno… no. Ahora faltaría tratar las gráficas obtenidas con algún software de manipulación de gráficos (sugiero GIMP que es Open Source) para obtener finalmente esto:

Espero que os sirva de ayuda. Si tenéis alguna duda, ya sabéis, utilizad los comentarios para que todos nos beneficiemos.