# Space and SEMs

WARNING: AS OF 10/1/2016 LAVAAN DOES NOT PRODUCE CORRECT CASEWISE RESIDUALS. PLEASE CALCULATE YOUR RESIDUALS BY HAND. HOPEFULLY THIS WILL BE FIXED SHORTLY, AND I WILL REMOVE THIS WARNING WHEN IT IS.

One question that comes up time and time again when I teach my SEM class is, “What do I do if I have spatially structured data?” Maybe you have data that was sampled on a grid, and you know there are spatial gradients. Maybe your samples are clustered across a landscape. Or at separate sites. A lot of it boils down to worrying about the hidden spatial wee beasties lurk in the background.

I’m going to stop for a moment and suggest that before we go any further you read Brad Hawkins’s excellent Eight (and a half) deadly sins of spatial analysis where he warns of the danger of throwing out the baby with the bathwater. Remember, in any modeling technique, you want to ensure that you’re capturing as much biological signal as is there, and then adjust for remaining spatial correlation. Maybe your drivers vary in a spatial pattern. That’s OK! They’re still your drivers.

That said, ignoring residual spatial autocorrelation essentially causes you to think you have a larger sample size than you think you do (remember the assumption of independent data points) and as such your standard errors are too tight, and you may well produce overconfident results.

To deal with this in a multivariate Structural Equation Modeling context, we have a few options. First, use something like Jon Lefcheck’s excellent piecewiseSEM package and fit your models with mixed model or generalized least squares tools that can accomodate spatial correlation matrices as part of the model. If you have non-spatial information about structure, I’ve started digging into the lavaan.survey package, which has been fun (and is teaching me a lot about survey statistics).

But, what if you just want to go with a model you’ve fit using covariance matrices and maximum likelihood, like you do, using lavaan in R? It should be simple, right?

Well, I’ve kind of tossed this out as a suggestion in the ‘advanced topics’ portion of my class for years, but never implemented it. This year, I got off of my duff, and have been working this up, and have both a solid example, and a function that should make your lives easier – all wrapped up over at github. And I’d love any comments or thoughts on this, as, to be honest, spatial statistics is not where I spend a lot of time. Although I seem to be spending more and more time there these days… silly spatially structured observational datasets…that I seem to keep creating.

Anyway, let’s use as an example the Boreal Vegetation dataset from Zuur et al.’s Mixed Effects Models and Extensions in Ecology with R. The data shows vegetation NDVI from satellite data, as well as a number of other covariates – information on climate (days where the temperature passed some threshold, I believe), wetness, and species richness. And space. Here’s what the data look like, for example:

# Boreality data from http://www.highstat.com/book2.htm
# Mixed Effects Models and Extensions in Ecology with R (2009).
# Zuur, Ieno, Walker, Saveliev and Smith. Springer
boreal <- read.table("./Boreality.txt", header=T)

#For later
source("./lavSpatialCorrect.R")

#Let's look at the spatial structure
library(ggplot2)

qplot(x, y, data=boreal, size=Wet, color=NDVI) +
theme_bw(base_size=18) +
scale_size_continuous("Index of Wetness", range=c(0,10)) +
scale_color_gradient("NDVI", low="lightgreen", high="darkgreen")

So, there are both clear associations of variables, but also a good bit of spatial structure. Ruh roh! Well, maybe it’s all in the drivers. Let’s build a model where NDVI is affected by species richness (nTot), wetness (Wet), and climate (T61) and richness is itself also affected by climate.

library(lavaan)

## This is lavaan 0.5-17
## lavaan is BETA software! Please report any bugs.

# A simple model where NDVI is determined
# by nTot, temperature, and Wetness
# and nTot is related to temperature
borModel <- '
NDVI ~ nTot + T61 + Wet
nTot ~ T61
'

#note meanstructure=T to obtain intercepts
borFit <- sem(borModel, data=boreal, meanstructure=T)

OK, great, we have a fit model – but we fear that the SEs may be too small! Is there any spatial structure in the residuals? Let’s look.

# residuals are key for the analysis
borRes <- as.data.frame(residuals(borFit, "casewise"))

#raw visualization of NDVI residuals
qplot(x, y, data=boreal, color=borRes\$NDVI, size=I(5)) +
theme_bw(base_size=17) +
scale_color_gradient("NDVI Residual", low="blue", high="yellow")

Well…sort of. A clearer way to see this that I like is just to see signs of residuals.

#raw visualization of sign of residuals
qplot(x, y, data=boreal, color=borRes\$NDVI>0, size=I(5)) +
theme_bw(base_size=17) +
scale_color_manual("NDVI Residual >0", values=c("blue", "red"))

OK, we can clearly see the positive residuals clustering on the corners, and negatives ones more prevalent in the middle. Sort of. Are they really? Well, we can correct for them one we know the degree of spatial autocorrelation, Moran’s I. To do this, there are a few steps. First, calculate the spatial weight matrix – essentially, the inverse of the distance between any pair of points. Close points should have a lower weight on the resulting analyses than nearer points.

#Evaluate Spatial Residuals
#First create a distance matrix
library(ape)
distMat <- as.matrix(dist(cbind(boreal\$x, boreal\$y)))

#invert this matrix for weights
distsInv <- 1/distMat
diag(distsInv) <- 0

OK, that done, we can determine whether there was any spatial autocorrelation in the residuals. Let’s just focus on NDVI.

#calculate Moran's I just for NDVI
mi.ndvi <- Moran.I(borRes\$NDVI, distsInv)
mi.ndvi

## \$observed
## [1] 0.08265236
##
## \$expected
## [1] -0.001879699
##
## \$sd
## [1] 0.003985846
##
## \$p.value
## [1] 0

Yup, it’s there. We can then use this correlation to calculate a spatially corrected sample size, which will be smaller than our initial sample size.

#What is our corrected sample size?
n.ndvi <- nrow(boreal)*(1-mi.ndvi\$observed)/(1+mi.ndvi\$observed)

And given that we can get parameter variances and covariances from the vcov matrix, it’s a snap to calculate new SEs, remembering that the variance of a parameter has the sample size in the denominator.

#Where did we get the SE from?
sqrt(diag(vcov(borFit)))

##    NDVI~nTot     NDVI~T61     NDVI~Wet     nTot~T61   NDVI~~NDVI
## 1.701878e-04 2.254616e-03 1.322207e-01 5.459496e-01 1.059631e-04
##   nTot~~nTot       NDVI~1       nTot~1
## 6.863893e+00 6.690902e-01 1.617903e+02

#New SE
ndvi.var <- diag(vcov(borFit))[1:3]

ndvi.se <- sqrt(ndvi.var*nrow(boreal)/n.ndvi)

ndvi.se

##    NDVI~nTot     NDVI~T61     NDVI~Wet
## 0.0001848868 0.0024493462 0.1436405689

#compare to old SE
sqrt(diag(vcov(borFit)))[1:3]

##    NDVI~nTot     NDVI~T61     NDVI~Wet
## 0.0001701878 0.0022546163 0.1322207383

Excellent. From there, it’s a hop, skip, and a jump to calculating a z-score and ensuring that this parameter is still different from zero (or not!)

#new z values
z <- coef(borFit)[1:3]/ndvi.se

2*pnorm(abs(z), lower.tail=F)

##     NDVI~nTot      NDVI~T61      NDVI~Wet
##  5.366259e-02  1.517587e-47 3.404230e-194

summary(borFit, standardized=T)

## lavaan (0.5-17) converged normally after  62 iterations
##
##   Number of observations                           533
##
##   Estimator                                         ML
##   Minimum Function Test Statistic                1.091
##   Degrees of freedom                                 1
##   P-value (Chi-square)                           0.296
##
## Parameter estimates:
##
##   Information                                 Expected
##   Standard Errors                             Standard
##
##                    Estimate  Std.err  Z-value  P(>|z|)   Std.lv  Std.all
## Regressions:
##   NDVI ~
##     nTot             -0.000    0.000   -2.096    0.036   -0.000   -0.044
##     T61              -0.035    0.002  -15.736    0.000   -0.035   -0.345
##     Wet              -4.270    0.132  -32.295    0.000   -4.270   -0.706
##   nTot ~
##     T61               1.171    0.546    2.144    0.032    1.171    0.092
##
## Intercepts:
##     NDVI             10.870    0.669   16.245    0.000   10.870  125.928
##     nTot           -322.937  161.790   -1.996    0.046 -322.937  -30.377
##
## Variances:
##     NDVI              0.002    0.000                      0.002    0.232
##     nTot            112.052    6.864                    112.052    0.991

See! Just a few simple steps! Easy-peasy! And a few changes – the effect of species richness is no longer so clear, for example

OK, I lied. That’s a lot of steps. But, they’re repetative. So, I whipped up a function that should automate this, and produce useful output for each endogenous variable. I need to work on it a bit, and I’m sure issues will come up with latents, composites, etc. But, just keep your eyes peeled on the github for the latest update.

lavSpatialCorrect(borFit, boreal\$x, boreal\$y)

## \$Morans_I
## \$Morans_I\$NDVI
##     observed     expected          sd p.value    n.eff
## 1 0.08265236 -0.001879699 0.003985846       0 451.6189
##
## \$Morans_I\$nTot
##     observed     expected          sd p.value    n.eff
## 1 0.03853411 -0.001879699 0.003998414       0 493.4468
##
##
## \$parameters
## \$parameters\$NDVI
##             Parameter      Estimate    n.eff      Std.err   Z-value
## NDVI~nTot   NDVI~nTot -0.0003567484 451.6189 0.0001848868  -1.92955
## NDVI~T61     NDVI~T61 -0.0354776273 451.6189 0.0024493462 -14.48453
## NDVI~Wet     NDVI~Wet -4.2700526589 451.6189 0.1436405689 -29.72734
## NDVI~~NDVI NDVI~~NDVI  0.0017298286 451.6189 0.0001151150  15.02696
## NDVI~1         NDVI~1 10.8696158663 451.6189 0.7268790958  14.95382
##                  P(>|z|)
## NDVI~nTot   5.366259e-02
## NDVI~T61    1.517587e-47
## NDVI~Wet   3.404230e-194
## NDVI~~NDVI  4.889505e-51
## NDVI~1      1.470754e-50
##
## \$parameters\$nTot
##             Parameter    Estimate    n.eff     Std.err   Z-value
## nTot~T61     nTot~T61    1.170661 493.4468   0.5674087  2.063171
## nTot~~nTot nTot~~nTot  112.051871 493.4468   7.1336853 15.707431
## nTot~1         nTot~1 -322.936937 493.4468 168.1495917 -1.920534
##                 P(>|z|)
## nTot~T61   3.909634e-02
## nTot~~nTot 1.345204e-55
## nTot~1     5.479054e-02

Happy coding, and I hope this helps some of you out. If you’re more of a spatial guru than I, and have any suggestions, feel free to float them in the comments below!

# Talking Kelps and Climate Change at the New England Aquarium

It’s always a bit painful to watch yourself talk, but I think this came off pretty well. A public lecture at the New England Aquarium. It was an interesting one to put together, and I’m still working on my style for public non-academic lectures, but all in all, not too shabby… I hope.

# Positive Multifunctionality ≠ All Functions Are Positive

Positive Multifunctionality ≠ All Functions Are Positive

I was dismayed this morning to read Bradford et al.’s recently accepted paper Discontinuity in the responses of ecosystem processes and multifunctionality to altered soil
community composition
in PNAS for several reasons.

The paper itself is really cool. They manipulated community complexity and nutrient conditions in the Ecotron, and then looked at five soil ecosystem functions. They then looked at whether complexity influenced multi functionality (as well as N), and found, indeed, it did! They went on and, as recommended in our paper on multifunctionality analyze single functions to understand what is driving that multifunctionality relationship, and then…

Then they fall off the boat completely.

Disappointment #1
They find that, while some functions were affected positively, some were not, and one more was affected negatively. They conclude, therefore, that multifunctionality metrics are not useful.

…multifunctionality indices may obscure insights into the mechanistic relationships required to understand and manage the influence of community change on ecosystem service provision.

The mismatch between our community and fertilization effects on multifunctionality and the individual processes, however, cautions against using the framework as a predictive tool for achieving desired levels of functioning for multiple, specified ecosystem services.

What is frustrating about this is that the authors completely miss what multifunctionality actually tells us.

I’m going to say this once very simply, and then in much more detail –

high multifunctionality ≠ every single function performing well

To quote from my own work, multifunctionality is “simultaneous performance of multiple functions.” No more, no less. A positive relationship between a driver and multifunctionality does not imply a positive relationship between that driver and every function being monitored. But rather that said driver will be able to increase the performance of more functions than are decreased.

Some More Detail
Indeed, in the example in Byrnes et al. 2014, we look at the data from the German BIODEPTH experiment. Some of the functions have a positive relationship with richness. Some do not. One has a trending negative relationship. But, put together, multifunctionality is a powerful concept that shows us that, if we are concerned with the simultaneous provision of multiple functions, then, yes, biodiversity enhances multifunctionality.

In our paper, we advise that researchers look at single functions – precisely because they are likely not all related to a driver in the same way. We state

The suite of metrics generated by the multiple threshold approach provide powerful information for analysing multifunctionality, especially when combined with analyses of the relationship between diversity and single functions.

We say this because, indeed, one has to ask – is the driver-MF relationship as strong as it could be? Why or why not? How can we pull the system apart into its component pieces to understand what is going on at the aggregate level?

The approaches are not in opposition, but rather utilizing both provides a much more rich picture of how a driver influences an ecosystem – both through an aggregate lens and a more fine-scale lens. The similarities and differences between them are informative, not discordant.

Disappointment #2
UPDATE: See comments from Mark and Steve below. This #2 would appear incorrect and a tale of crossed paths not scene. While I cannot find anything in my various inboxes regarding communication, it’s possible either a bad email address was used, or it went missing in my transition between nceas and umb. If this is the case, I’m in the wrong on this. An interesting quandry of how do we resolve these things outside of the literature, and worth pondering in this our modern age of email. I leave my comments below for the sake of completeness, and as there are still some ideas worth thinking about. But, wish that email hadn’t disappeared somewhere into the ether! Now the more my disappointment in technology!

Perhaps the bigger bummer is that, despite this being a big critique of the idea of multifunctionality that our group spent a *huge* amount of time trying to figure out how to quantify in a meaningful and useful way, as far as I know, none of us were contacted about this rebuttle. The experiment and analysis of the experiment is excellent, and it gets into some really cool stuff about soil biocomplexity and ecosystem multifunctionality. But the whole attacking multifunctionality as a useful concept thing?

That entire controversy could have been resolved with a brief email or two, tops. For this group to go so far off base is really kind of shocking, and dismaying.

Dismaying because the advice that would seem to stem from this paper is to go back to just looking at single functions individually and jettison the concept of multifunctionality (no other alternative is provided). That places us squarely back in 2003, with fragmented different types of analyses being used in an ad hoc manner without a unifying framework. Precisely what we were trying to avoid with our methods paper.

And all it would have taken to prevent is a little bit of communication.

References
Bradford, M. A., S. A. Wood, R. D. Bardgett, H. I. J. Black, M. Bonkowski, T. Eggers, S. J. Grayston, E. Kandeler, P. Manning, H. Setälä, and T. H. Jones. 2014. Discontinuity in the responses of ecosystem processes and multifunctionality to altered soil community composition. PNAS. link

Byrnes, J. E. K., L. Gamfeldt, F. Isbell, J. S. Lefcheck, J. N. Griffin, A. Hector, B. J. Cardinale, D. U. Hooper, L. E. Dee, and J. Emmett Duffy. 2014. Investigating the relationship between biodiversity and ecosystem multifunctionality: challenges and solutions. Methods in Ecology and Evolution. 5: 111-124. doi: 10.1111/2041-210X.12143

# Getting it Right – after Publication: A Multifunctional Journey?

Sometimes, you have to publish a paper to have the hit-yourself-in-the-head revelation of the real right answer.

Earlier this year, along with a great cohort of colleagues, I birthed a really neat piece summarizing how you can look at simultaneous change in multiple ecosystem functions. We were interested in how changes in diversity can affect the simultaneous performance of multiple functions, but, really, anything can be put on the X axis – warming, fertilization, lemony-fresh-scentedness – it doesn’t matter.

This was a problem that had been vexing the field of biodiversity-ecosystem-function, or, really, anyone who wanted to look at multiple functions. Our group spent multiple sessions bashing our heads against a wall trying to derive a solid analytic strategy to look at changes in so-called multifunctionality and in the end came up with something that I’m pretty proud of. The basic idea of our approach was to look at the slope of the relationship between a predictor and the number of functions ≥ some threshold of their maximum – but then do it for lots of thresholds. Why is it important to looks at lots of thresholds? Well, if you look at the lines for each choice of threshold, you get something like this:

Note, that’s from the multifunc R package vignette, and its the analysis from our paper.

Anyway, you can see how the slope and intercept change with different threshold choices. We eventually looked at how slope changes with threshold, and used that to divine a fingerprint of multifunctionality. But, a plot of threshold v. slope – it’s kind of abstract, and can be hard to parse. It was the best we could do, though, as we thought and thought about it.

While working on a recent analysis, I began to wonder – one of the key numbers we want is something like, how does multifunctionality change with the addition or removal of one species? We can look at how one function changes with diversity – but we still don’t have a good something with our predictor on the X-axis. And yet, the question I want to answer is key if we want to think about the consequences of, say, losing species for a multifunctional world.

Discussing this with Jon Lefcheck, I was suddenly struck by something he had done in a figure on a manuscript. He drew a plot like the one I showed above, only, he also put a line across the top at the maximum number of functions observed in an experiment. I noticed that as my eye moved across the plot – from low to high diversity – I could see the color change along the line, indicating that the maximum number of functions were able to hit progressively higher levels of function. At low levels, nothing was able to hit any threshold. At high levels, a few were. So…one could in theory plot diversity against the highest threshold that all of the observed functions could hit all at once.

Lines drawn on top of the same figure for 5 functions and for 2 functions. Let your eye wander along them and note the change in color. Also, note the weird optical illusion at F=2. Yes, that line is actually straight.

Moreover, if I were to, say, draw a line at a lower number of functions, I would see the same pattern – but the relationship would change. Now, higher thresholds could be reached by a lower number of functions – but, eyeballing it, it looked like the linearity changed. In some ways, it made me think of, in the BEF literature, if we have only one function, we get a saturating curved relationship between diversity and function. But for multifunction, a few of us have long wondered if we might get a more linear relationship.

So, for the German example, I decided to whip up some simple code to explore the relationship between diversity, number of functions, and maximum threshold those functions can achieve. I used the fitted model, and then just calculated which thresholds could achieve some number of functions at a given level of diversity, and grabbed the maximum. The results are interesting.

You can see that fewer functions can simultaneously achieve a higher threshold – this is predictable. But there’s a suggestion that the curvilinearity of the relationship switches from linear to concave-up as more functions are considered. That’s it’s linear to begin with is notable, as with few functions I would expect more concave-down-ness. And you kinda get that if you run it down to one function, but, this site in general in earlier papers didn’t have an incredibly strong saturating relationship compared to some other classic examples.

Overall, while it takes a bit of a moment to realize what’s going on, I think this is a far more interpretable graph than what we presented in the paper. I haven’t subjected it to the same in-depth can-this-be-fooled simulations that we did for the MEE paper, but, I have to admit…I kind of like this, and think it might be the answer we tried to get at oh so long ago.

# A Kelpy Time Machine

This is x-posted from my guest post at Deep Sea News about the new Floating Forests citizen science project I’m part of. If you’re excited about it, go check out http://www.floatingforests.org/!

There’s something I’ve always wanted. Something that would take kelp forest science to a new level. Something that would let me do the kind of work that I dream about, quietly, secretly, peering into the mysteries of kelpiness.

It is something impossible.

It is a time machine.

And now I have one. But with a catch. For you, my dear friends, are its pilot.

OK, OK, first, why use a time machine as a tool of science, and not, I don’t know, to right wrongs and make the world a better place? Well, first off, temporal paradoxes, y’all. Come on. Be realistic. Has Doctor Who taught us nothing? Or decades of Star Trek? Or Primer? (seriously, see that last one, as it will hurt your brain in a good way).

But then, why, kelp? What? Hear me out.

There are so many things that we as marine biologists want to know about the state of ecosystems in the past. For many things, we hardly ever have records that are older than ten usually for just one small area. This is really problematic – especially for something like Giant Kelp.

You see, Giant Kelp (that’s Macrocystis to you!) is kind of the bad-ass of the algae world. It’s pretty damn huge – up to 60m long in some places – and grows up to a foot or two a day. It’s so damn big, we can see it from orbit1.

Photo courtesy of the Seaweed Industry Association

It’s also everywhere – from Alaska to Baja to South Africa to much of South America to New Zealand to the sub-Antarctic islands. And, according to the Lane et al. phylogeny, it’s all one species2. It gets *around*. And wherever it is, it feeds, houses, and nourishes much of the life in the sea around it.

So, where does the time machine come in, and why are you piloting it?

Simply put – Keeeelllppp Innnnnn Spaaaace!

The Landsat family of satellites have been orbiting earth, taking photos of the whole globe twice a month since the early 1980s. Photos where we can see kelp. They are a time machine we as scientists can use to go back and see how kelp has changed over thirty years.

Can we see the near-extinction of giant kelp from Tasmania? Can we see it moving around the coast of South Africa? Has it been walking away from the warming equator? Is there more or less now than there was in the past?

OK, this sounds pretty cool. But where do you, our time-traveling pilots come in?

Basically computers suck.

OK, no, really, we love them. *pets shiny Apple laptop* BUT – they cannot tell kelp from waves or clouds in the Landsat images. My collaborators (the real remote sensing part of this team) have tried. It’s a no-go. We actually need people – kelp hunters, if you will, to peer at the millions of images of potential kelp habitat and help us discover these Floating Forests.

We need you.

Working with the Big Momma of online citizen science, Zooniverse, my collaborators from the Kelp Ecosystem Ecology Network (KEEN) and I have created an online citizen science project called Floating Forests. In it, we ask you to take a look at images. Help us cull out bad ones (they’re satellites – they take pictures cloudy cloudy rain or (often still cloudy) shine, or take pictures of more than we think.

And if you see kelp, circle it!

We’ll give you images of coastline – like this July 2001 picture of Santa Cruz on the left. You circle the kelp beds, and that yields data about kelp abundances, as you can see on the right.

It’s really quite meditative to see images of the land and see whisk by, pausing periodically to lasso a green bed of kelp.

Maybe you’ll see a wave-swept vista of Point Lobos. Maybe you’ll see the Googleplex (I did – by accident). Maybe you’ll see somewhere you’ve never dreamed of traveling, but with that big kelp bed sitting there, you know the destination of your next dive trip.

So, please, go hop into the pilot’s stick of this magical kelpy time machine. Poke around. And ask questions! We scientists are there to talk to you! What are you waiting for?

Yes, this is the entrance to a time machine.

# The Beatles and Kelp

For a blog post somewhere else, I’m trying to re-work the Beatle’s classic Kelp!, er, I mean, Help!. But my first draft got all urchin-y. I love it, though, so I thought I’d post it here.

KELP! (from the perspective of a growing urchin)

Kelp! I need some algae.
Kelp! not just any algae
Kelp! You know I need some kelp!

When I was younger (So much younger than) so much younger than today
(I never needed) I never needed any growing kelp in any way
(Now) But now these days are gone (These days are gone), I don’t eat just diatoms
(I know I’ve found) Now I find I’ve changed my mind and opened up my jaws

Kelp me if you can, I’m hungry now
And I do appreciate kelp being ’round
Kelp is great food for me oh right now
Won’t you please, please kelp me

(Now) And now my spines have changed in oh so many ways
(My Aristotle’s lantern) My Aristotle’s lantern is big and ready to graze
(And) And every now (Every now and then) and then I feel so insecure
(I know that I) I know that I just need kelp like I’ve never needed it before

(chorus)

When I was younger (So much younger than) so much younger than today
(I never needed) I never needed any growing kelp in any way
(Now) But now these days are gone (These days are gone), I don’t eat just diatoms
(I know I’ve found) Now I find I’ve changed my mind and opened up my jaws

Kelp me if you can, I’m hungry now
And I do appreciate kelp being ’round
Kelp is great food for me oh right now
Won’t you please, please kelp me, kelp me, kelp me, ooh

# Damn, That’s Some Big Kelp!

I’m not sure what it is this year, but the kelp we’re seeing in the Southern Gulf of Maine is just fracking huge. Last year, yeah, there were kelpy areas, and there were kelps that were ~1-1.5 meters long, which, you know, impressive. But this year…

It started when Team Dive (this summer, we have Team Marsh – #marshlife – and Team Dive going on) hit up the outer Boston Harbor Islands. We hadn’t been out much since winter. They found vasty fields of Laminaria digitata and Saccharina latissima (well, with their super-long stipes, they looked like S. longicruris, but it looks like they are now the same species – e.g., Cho et al. 2000 and others). How big? Twice the size of a grad student!

But this was at the mouth of Boston Harbor. Maybe a fluke, or eutrophication?

As we kept working up in Salem Sound, though, the kelp seemed…well…big! But, eh, still urban-ish, still maybe an urban thing… (although it was *not* so big last summer).

If anywhere should be free of the urban influence, it should be Appledore Island in the Isles of Shoals. It’s a few miles offshore, and has lots of microenvironments. And yet, everywhere we look – big-arse kelp! Super dense kelp area where last year an intern almost lost her mind counting kelp stipes? Still mind-exploding. Except now you have to count stipes by feel while your face gets wrapped up in the giant lasagna-blades of Saccharina. And it’s just as big.

OK, I’m 6’2″. And a half. (~1.88m). Here’s me, with my fins just barely touching the seafloor.

It’s everywhere! Even in the wave-protected low-kelp density Heterosiphonia sites, while we do find lots of smaller kelps, the monsters still abound. See how it compares to the size of Team Dive.

This isn’t to say it’s *all* that huge. A size distribution from the site that piece came from for reference:

But, still, what is up with this? Big kelps coupled with very cold water temperatures of course has my California trained brain thinking more time with high nutrients, but I don’t know whether that relationship is as strong here in the southern Gulf of Maine. It’s making me very excited to see the oceanographic work that comes out in the next year or so to see just what forces are driving all of this!

And even more curious to know what’s going to happen next year, as we’re seeing massive numbers of tiny urchin recruits (and a lot of sea star recruits) often folded up in the eroding tips of many of these big honkers. Or on Desmerestia, like ornaments on a Christmas tree (240 in a square meter plot yesterday!).

References
Cho, G. Y., H. S. Yoon, S. M. Boo, and C. Yarish. 2000. Atlantic kelp species Laminara longicruris and L. saccharina (Laminariales) are conspecific. Journal of Phycology 36:12–13.

# The Launch of the R/V Botryllid

Woohoo! It’s another amazing research season out here at the Shoals Marine Lab. We’re in the midst of our push to sample SML, Salem Sound, and the Boston Harbor Islands. The weather is glorious, and the water is…ok, not warm. 47F this year. Last summer at this time it was a good 5 degrees F warmer. But, either way, here we go on our summer Shoals sampling adventure!