AIM : To find vertical offset to convert standardized absorption spectra of Red, Green and Brown algae to absorbance values (OD) from Enrı́quez, Agustı́, and Duarte (1994) figures 3 and 6.
Document Note : The maps, plots and app within this document are interactive so make sure you give them a play like zooming in and out in the maps but also on the plots. Clicking on the legend allows to only select and display the time series needed.
fig6 <- read_csv('Enriquez1994_Fig6_logscale_WebPlotDigitilizer.csv', skip = 1) #%>%
p <- ggplot(fig6,aes(x=Abs675,y=Abs440)) +
geom_point() +
scale_x_continuous(trans='log10', limits=c(0.01, 10)) +
scale_y_continuous(trans='log10', limits=c(0.1, 10)) +
geom_smooth(method = 'lm') +
xlab('Absorbance at 675nm (OD)') +
ylab('Absorbance at 440nm (OD)') +
ggtitle('Relationship between Absorbance at 675nm and 440nm (OD) by macrophyte tissues according to Enriquez et al. (Fig. 6') +
theme_light()
ggplotly(p)
Figure 1 - Rationship between the average absorbance by macrophyte tissues at 440nm and 674nm. From Enrı́quez, Agustı́, and Duarte (1994) figure 6.
lmfit <- lm(log10(Abs440) ~ log10(Abs675), fig6)
summary(lmfit)
##
## Call:
## lm(formula = log10(Abs440) ~ log10(Abs675), data = fig6)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.34205 -0.14667 -0.03583 0.16327 0.39495
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.17502 0.04198 4.169 0.000134 ***
## log10(Abs675) 0.67738 0.08651 7.830 5.27e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1963 on 46 degrees of freedom
## Multiple R-squared: 0.5713, Adjusted R-squared: 0.562
## F-statistic: 61.31 on 1 and 46 DF, p-value: 5.272e-10
Following the regression:
We assume that \(a_{440} = a_{std440} + offset\) and \(a_{675} = a_{std675} + offset\).
We can then rewrite the regression equation:
Which becomes a root-finding problem, \(offset\) being the unknown parameter to find the value that is the root of the above equation. \(a_{std440}\) and \(a_{std675}\) have different values for Brown, Red and Green algae cf figure 3 of Enrı́quez, Agustı́, and Duarte (1994).
abs_spectra_algal_int <- read_csv('Std_Abs_Spectra_RGB_Enriquez1994.csv')
p_abs <- ggplot(abs_spectra_algal_int) +
geom_line(aes(x=Lambda,y=Average_Brown),col='brown',lwd=1) +
geom_line(aes(x=Lambda,y=CI_Sup_Brown),col='brown',lty='dashed') +
geom_line(aes(x=Lambda,y=CI_Inf_Brown),col='brown',lty='dashed') +
geom_line(aes(x=Lambda,y=Average_Red),col='red',lwd=1) +
geom_line(aes(x=Lambda,y=CI_Sup_Red),col='red',lty='dashed') +
geom_line(aes(x=Lambda,y=CI_Inf_Red),col='red',lty='dashed') +
geom_line(aes(x=Lambda,y=Average_Green),col='green',lwd=1) +
geom_line(aes(x=Lambda,y=CI_Sup_Green),col='green',lty='dashed') +
geom_line(aes(x=Lambda,y=CI_Inf_Green),col='green',lty='dashed') +
ylab('Standardized Absorbance') +
ggtitle('Standardized Absorbance of Brown, Red and Green Algae according to Enriquez et al., 1994.') +
theme_light()
ggplotly(p_abs)
Figure 2 - Standardized Absorbance of Brown, Red and Green Algae according to Enrı́quez, Agustı́, and Duarte (1994) figure 3.
For brown algae, \(a_{std440_B} = 1.519\) and \(a_{std675_B} = -0.1775\). The equation to find the root (offset value) becomes: \(\log10(a_{std440_B} + offset) - intercept - slope*\log10(a_{std675_B} + offset) = 0\) \(\leftrightarrow \log10(1.519 + offset) - 0.17502 - .67738*\log10(-0.1775 + offset) = 0\)
f_offset <- function(offset,s,i,astd440,astd675){
log10(astd440 + offset)-i-s*log10(astd675 + offset)
}
offset_vec <- seq(.5,10,.01)
interc <- lmfit$coefficients[1]
slope <- lmfit$coefficients[2]
astd440_b <- abs_spectra_algal_int$Average_Brown[which(abs_spectra_algal_int$Lambda==440)]
astd675_b <- abs_spectra_algal_int$Average_Brown[which(abs_spectra_algal_int$Lambda==675)]
plot(x=offset_vec,y=f_offset(offset_vec,s=slope,i=interc,astd440=astd440_b,astd675=astd675_b),type='l',xlab='Offset range', ylab = 'f(offset)')
The function does not cross the zero horizontal line meaning there is no solution to the equation…
uniroot(f_offset,s=slope,i=interc,astd440=astd440_b,astd675=astd675_b,interval = c(.5,4))#,extendInt="yes")#$root
The root finding function returns an error as there is no root.
For red algae, \(a_{std440_R} = 1.4867\) and \(a_{std675_R} = -0.4009\). The equation to find the root (offset value) becomes: \(\log10(a_{std440_R} + offset) - intercept - slope*\log10(a_{std675_R} + offset) = 0\) \(\leftrightarrow \log10(1.4867 + offset) - 0.17502 - .67738*\log10(-0.4009 + offset) = 0\)
astd440_r <- abs_spectra_algal_int$Average_Red[which(abs_spectra_algal_int$Lambda==440)]
astd675_r <- abs_spectra_algal_int$Average_Red[which(abs_spectra_algal_int$Lambda==675)]
plot(x=offset_vec,y=f_offset(offset_vec,s=slope,i=interc,astd440=astd440_r,astd675=astd675_r),type='l',xlab='Offset range', ylab = 'f(offset)')
The function does not cross the zero horizontal line meaning there is no solution to the equation…
uniroot(f_offset,s=slope,i=interc,astd440=astd440_r,astd675=astd675_r,interval = c(.5,4))#,extendInt="yes")#$root
The root finding function returns an error as there is no root.
For green algae, \(a_{std440_G} = 1.4459\) and \(a_{std675_G} = 0.3709\). The equation to find the root (offset value) becomes: \(\log10(a_{std440_G} + offset) - intercept - slope*\log10(a_{std675_G} + offset) = 0\) \(\leftrightarrow \log10(1.4459 + offset) - 0.17502 - .67738*\log10(0.3709 + offset) = 0\)
astd440_g <- abs_spectra_algal_int$Average_Green[which(abs_spectra_algal_int$Lambda==440)]
astd675_g <- abs_spectra_algal_int$Average_Green[which(abs_spectra_algal_int$Lambda==675)]
plot(x=offset_vec,y=f_offset(offset_vec,s=slope,i=interc,astd440=astd440_g,astd675=astd675_g),type='l',xlab='Offset range', ylab = 'f(offset)')
The function does not cross the zero horizontal line meaning there is no solution to the equation…
uniroot(f_offset,s=slope,i=interc,astd440=astd440_g,astd675=astd675_g,interval = c(.5,4))#,extendInt="yes")#$root
The root finding function returns an error as there is no root.
fig6_2 <- read_csv('Enriquez1994_Fig6_10p_WebPlotDigitilizer.csv', skip = 1) #%>%
p2 <- ggplot(fig6_2,aes(x=Abs675_10p,y=Abs440_10p)) +
geom_point() +
#scale_x_continuous(trans='log10', limits=c(0.01, 10)) +
#scale_y_continuous(trans='log10', limits=c(0.1, 10)) +
scale_x_continuous(limits=c(-2, 1)) +
scale_y_continuous(limits=c(-1, 1)) +
geom_smooth(method = 'lm') +
xlab('10^Absorbance at 675nm (OD)') +
ylab('10^Absorbance at 440nm (OD)') +
ggtitle('Relationship between Absorbance at 675nm and 440nm (OD) by macrophyte tissues according to Enriquez et al. (Fig. 6') +
theme_light()
ggplotly(p2)
Figure 3 - Rationship between the average absorbance by macrophyte tissues at 440nm and 674nm. From Enrı́quez, Agustı́, and Duarte (1994) figure 6.
lmfit2 <- lm(Abs440_10p ~ Abs675_10p, fig6_2)
summary(lmfit2)
##
## Call:
## lm(formula = Abs440_10p ~ Abs675_10p, data = fig6_2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.34907 -0.15213 -0.03442 0.16316 0.39091
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.18541 0.04302 4.309 8.79e-05 ***
## Abs675_10p 0.69016 0.08762 7.877 5.21e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1972 on 45 degrees of freedom
## Multiple R-squared: 0.5796, Adjusted R-squared: 0.5703
## F-statistic: 62.05 on 1 and 45 DF, p-value: 5.209e-10
Following the regression:
fig8 <- read_csv('Enriquez1994_Fig8_log10_WebPlotDigitilizer.csv', skip = 1) #%>%
p8 <- ggplot(fig8,aes(x=Chla_concentration ,y=absorbance_weight )) +
geom_point() +
scale_x_continuous(trans='log10', limits=c(0.01, 1000)) +
scale_y_continuous(trans='log10', limits=c(1, 10000)) +
geom_smooth(method = 'lm') +
#xlab('Absorbance at 675nm (OD)') +
#ylab('Absorbance at 440nm (OD)') +
ggtitle('Relationship between specific absorbance (per unit of weight) and chla concentration according to Enriquez et al. (Fig. 8)') +
theme_light()
ggplotly(p8)
Figure 4 - Relationship between specific absorbance (per unit of weight) and chla concentration. From Enrı́quez, Agustı́, and Duarte (1994) figure 8.
lmfit8 <- lm(log10(absorbance_weight) ~ log10(Chla_concentration), fig8)
summary(lmfit8)
##
## Call:
## lm(formula = log10(absorbance_weight) ~ log10(Chla_concentration),
## data = fig8)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.67825 -0.16396 -0.00542 0.17449 0.64536
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.82977 0.03462 23.97 <2e-16 ***
## log10(Chla_concentration) 0.95373 0.03859 24.71 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2813 on 117 degrees of freedom
## Multiple R-squared: 0.8392, Adjusted R-squared: 0.8378
## F-statistic: 610.7 on 1 and 117 DF, p-value: < 2.2e-16
Following the regression:
We find the same coefficients as Enrı́quez, Agustı́, and Duarte (1994) so the method in part 1 should be good hopefully.