the Air Vent

Because the world needs another opinion

Briffa MXD 2013 #1

Posted by Jeff Id on January 20, 2014

I’ve spent a little time compiling MXD proxies from Briffa 2013. I don’t have a lot of results yet but I thought I would put them up. First, I created a simplified reconstruction by centering the proxies and then normalizing by standard deviation and averaging.  That is why Phi claimed to have done, and my data does seem to match his pretty well.   The graphs below have a 21 year Gaussian filter.

basic reconstruction Briffa 2013

Phi stated in paraphrase that no age correction is needed for MXD data.   I took a look at that claim below.  By aligning the trees so that their first ring densities started in year 1 and averaging, I created the plot below.   The two sigma dark gray region assumes a normal distribution of data but you can see the red curve exceeds the no signal confidence interval expected if MXD didn’t demonstrate a signal by age.

growth curve polar mxd

Taking the examination a step further, I was concerned that younger trees or trees from different periods would show a different general trend with age.   Randomly, I split the trees into two groups, those whose birthday was before 1500AD and those after 1500AD.  Both sets of trees exhibited the same initial hump in the first 150 years of growth.  It is a bit concerning that they have such strong divergence in their older years.  If we normalized everything with a spline to figure 2, we might be able to create quite a blade on the end of our reconstruction.

From this, I think it is quite reasonable to make some kind of RCS based correction to the growth curves.  Ignoring that correction would lead to spurious trends as the data does have a strong tree age related signal.  Finding a reasonable sort of correction though is going to be a bit of work.

growth curve polar mxd sorted by age

The source code is below, it is pretty messy so I will clean it up for future posts.

<br /><br />#### load external functions filtering used<br />source("")  #Steve McIntyre<br /><br />### Gausssian filter<br />ff=function(x)<br />{<br /><%%KEEPWHITESPACE%%>	filter.combine.pad(x,truncated.gauss.weights(21) )[,2]#31<br />}<br /><br />### load briffa data<br />loc="c:/agw/briffa 2013/data/raw/polar/polar.mxd"<br />wd=c(12,6,6,6,6,6,6,6,6,6,6)<br />dat=read.fwf(loc,widths=wd)<br /><br />treename=substr(dat[,1],1,8)<br />treeid=levels(factor(treename))<br />year = as.numeric(substr(dat[,1],9,12))<br />allyear=levels(factor(year))<br />tsdat= ts(matrix(nrow=1140, ncol=length(treeid)),start=870)<br /><br />alltrees=array(NA,dim=c(400,length(treeid)))<br />treemin=rep(NA,length(treeid))<br /><br />### align trees by age rather than year<br />for (i in 1:length(treeid))<br />{<br /><%%KEEPWHITESPACE%%>	mask= treename==treeid[i]<br /><%%KEEPWHITESPACE%%>	da=dat[mask,]<br /><%%KEEPWHITESPACE%%>	yr=year[mask]<br /><%%KEEPWHITESPACE%%>	treemin[i]=min(yr)<br /><%%KEEPWHITESPACE%%>	for(j in 1:length(yr))<br /><%%KEEPWHITESPACE%%>	{<br /><%%KEEPWHITESPACE%%>		ageindex=yr[j]-treemin[i]+1<br /><%%KEEPWHITESPACE%%>		alltrees[ageindex:(ageindex+9),i]=as.numeric(da[j,2:11])<br /><%%KEEPWHITESPACE%%>	}<br />}<br /><br />mask= alltrees== -9999 | alltrees== -9990<br />alltrees[mask]=NA<br />alltrees=ts(alltrees,start=1)<br />plot(alltrees[,1:10])<br /><br />### center and normalize all trees by standard deviation<br />alltrees=t(t(alltrees)-colMeans(alltrees,na.rm=TRUE)) #center<br />alltrees=t(t(alltrees)/sd(alltrees,na.rm=TRUE)) #normalize to sdev<br />alltrees=ts(alltrees,start=1)<br />plot(alltrees[,11:20])<br /><br />par(bg="gray90")<br />growthcurve=ts(rowMeans(alltrees,na.rm=TRUE),start=1)<br />plot(ff(growthcurve),main="Growth Signal from Briffa 2013 Polar MXD Data",xlab="Age (years)",ylab="Unitless",ylim=c(-1,1))<br /><br />#take standard deviation by row<br />sdr=sd(t(alltrees),na.rm=TRUE)<br />rowcount= rowSums(!<br />deviation=ff(ts(sdr/rowcount^.5,start=time(growthcurve)[1]))<br />dm=!<br />lines(1.96*-deviation)<br />lines(1.96*deviation)<br /><br />polygon(xy.coords(x=c(time(alltrees)[dm],rev(time(alltrees)[dm])),y=c(1.96*deviation[dm],rev(-1.96*deviation[dm]))),col="gray60")<br />legend("bottomright","Dark Gray Indicates Two Sigma Standard Deviation")<br />lines(ff(growthcurve),col="red",lwd=3)<br />#tree age average exceeds 95% CI<br /><br />oldmask=treemin&lt;1500<br />oldgrowthcurve=ts(rowMeans(alltrees[,oldmask],na.rm=TRUE),start=1)<br />plot(ff(oldgrowthcurve),main="Growth signal from Briffa 2013 Polar MXD Data\nTrees Sorted by Birth Date",xlab="Age (years)",ylab="Unitless",ylim=c(-1.5,1))<br /><br />newgrowthcurve=ts(rowMeans(alltrees[,!oldmask],na.rm=TRUE),start=1)<br />lines(ff(newgrowthcurve),col="red")<br /><br />legend("bottomleft",c("Trees born before 1500","Trees born after 1500"),col=c(1,2),fill=1:2)<br /><br />#mash values in timeseries<br />for(i in 1:dim(dat)[1])<br /><br />{<br /><%%KEEPWHITESPACE%%>	yearindex=as.numeric(year[i])-870<br /><%%KEEPWHITESPACE%%>	tsdat[yearindex:(yearindex+9),which(treename[i]==treeid)]=as.numeric(dat[i,2:11])<br />}<br /><br />mask=tsdat==-9990|tsdat==-9999  #remove missing values<br />tsdat[mask]=NA<br /><br />tsdat=t(t(tsdat)-colMeans(tsdat,na.rm=TRUE)) #center series<br /><%%KEEPWHITESPACE%%> colMeans(tsdat,na.rm=TRUE)#check<br />tsdat=t(t(tsdat)/sd(tsdat,na.rm=TRUE)) #standard deviation normalize<br />sd(tsdat,na.rm=TRUE)  #check<br /><br />recon=ts(rowMeans(tsdat,na.rm=TRUE),start=870)<br /><br />par(oma=c(1,1,1,1), mfrow=c(2,1), bg="gray90",mar=c(4,4,3,3))<br />plot(ff(recon),main="Basic Reconstruction Briffa 2013 Polar MXD Data",xlab="Year",ylab="Unitless")<br />cores=ts(rowSums(!,start=time(recon)[1])<br />plot(cores,main="Core count",xlab="Year",ylab="Cores")<br />polygon(xy.coords(x=c(time(recon),rev(time(recon))),y=c(cores,rep(0,length(cores)))),col="red")<br /><br />

26 Responses to “Briffa MXD 2013 #1”

  1. Brian H said

    those who’s birthday
    who’s = who is

    whose car are we taking and who’s coming along?

    • Lynn Clark said

      Thanks for that Brian. I’m always tempted to say something similar, but usually don’t for fear of making someone else feel compelled to accuse me of being some kind of smarty-pants.

      But since you already laid the groundwork, let’s flesh it out a bit. It’s obviously a difficult subject even for native English speakers, so maybe this will help them, and especially help those for whom English is a second language.

      In the English language, there are many special cases that don’t make very much sense, and you really just have to memorize them. This is one of those special cases.

      In the English language, adding apostrophe-s (‘s) to a proper name or noun indicates that it is “possessive”. For example, “Brian’s boat”, or “Jeff’s jet”, or “the city’s taxi fleet”.

      But this rule doesn’t apply to pronouns. So, the following are all “possessive”: his, her (can also be non-possessive: “give the ball to her”), hers, its, our, ours, their, theirs, whose, your, yours. These are special cases of possessive words that don’t use an apostrophe (‘). Examples: “that is his car”, “that’s his car”, “the car is his”, “that is her car”, “that’s her car”, “the car is hers”, “that is its color”, “that is our car”, “the car is ours”, “that is their car”, “the car is theirs”, “whose car is it?”, “the car is whose?”, “is that car yours?”, “is that your car?”, “that car is yours”, “that car is your car”, “its color”, “its smell”, “its dimensions”.

      On the other hand, if you write “it’s” or “who’s”, it always means, respectively, “it is” and “who is”. I can’t think of any valid use in the English language for writing “hi’s” or “his’s”, “our’s”, “their’s”, or “your’s” (but you might write “there’s” to mean “there is”, but that “there” is not the same as “their” — and “they’re” always means “they are”, even though it is often pronounced by lazy English speakers the same or similar as “their” and “there”). Examples: “it’s his car” (same as “it is his car”), “it’s her car” (same as “it is her car”), “who’s on first?” (same as “who is on first?”)

      And then there’s (“there is”) “your” and “you’re”. “your” is always possessive. “you’re” always means “you are”. “your” never means “you’re”, and “you’re” never means “your”, even though many people seem to use them interchangeably, probably due to laziness when thumb-typing on handheld devices like smartphones and tablets.

      Whew, I hope that helps someone. It’s surprisingly difficult to explain clearly. I always feel sorry for non-English speakers who learn English. Having spent some time learning French 50 years ago, and Mandarin Chinese in recent years, I have nothing but respect for non-English speakers who can achieve even a minimum level of proficiency in the English language. It is definitely not an easy language to learn well, even for those of us for whom it is our first language. 😉

      • Jeff Id said

        Holy cow Lynn. I hope you copied that from a previous paragraph. 😀

        I fixed the typo finally. The rules aren’t that hard but my wife was an English major so I am surrounded!

        • timetochooseagain said

          Well Jeff, it makes you feel any better I make sloppy mistakes all the time and I *really* should know better, considering I used to be better at finding mistakes than my teachers. I guess I’ve gotten grammatically lazy.

        • Lynn Clark said

          I agree with Timetochooseagain. It always amazes me how many silly errors show up when I proof-read something I’ve just written. We’re all human, with imperfect brain-finger interconnections.

          And no, I didn’t copy it from a previous paragraph, but it did go through several proof-reading/tweaking passes before I clicked on “submit”. 😉

          Also, your blog is one of a dozen-or-so blogs that I visit every day, and I always enjoy reading what you have to say, even with the occasional mis-use of “who’s”. 😉

  2. Brian H said

    Recent article on mass accumulation in trees suggests increase with age, not plateau as previously assumed.

  3. timetochooseagain said

    Silly Jeff, trees aren’t “born” they *sprout*. Only non-monotreme mammals and a few other non-mammalian animals give birth.

  4. Kenneth Fritsch said

    Jim Bouldin has discussed some serious analytical problems involved in dendroclimatologyat at his blog and I believe in some authored papers.

    Jeff, if you have not read what he has to say it might be good background for you. I assume he knows what he is talking about when it comes to trees as he has presented a ton of analyses. When it comes to more basic issues I do not agree with him.

    I have had discussions with Bouldin pointing out the basic flaw in temperature reconstructions that select proxies after the fact of observing how well those proxies track the instrumental record and using that selection criteria as sufficient by itself. I pointed out how the averaging effect needed to find a signal hidden in the noise is biased if you do not have a prior selection process and then use all that selected data. Jim’s comment was that selection after the fact is the only way of doing temperature reconstructions. Using a calibration and validation period does not really overcome the bias from selecting after the fact since all that in-sample testing does is assure that the correlation with the instrumental record suffices over the entire instrumental period.

    I had the question some time ago about whether MXD required the age correction as TRW did. While I could not find a good reason for a correction for MXD, I believe the answer I finally received said, yes, one did have to correct MXD. I have had email exchanges with Melvin of Briffa/Melvin papers on Regional Curve Standardization and their most recent approach of a signal-free’ approach to dendroclimatic standardization and asked for their code. The latest exchange was months and I was informed that the code was not yet publically available. The signal free approach as I recall does change the relationship of the TRW to temperature from that of previous approaches which in turn says (if we concede that the basic approach is correct – which I do not) that these standardization methods are a work in process. I think Jim Bouldin is saying that that work in progress is doomed to failure.

    Also Layman Lurker had an interesting analysis of a Briffa MXD (I think it was MXD), temperature reconstruction and the lengthy time period for which the divergence was apparent 8in his analysis.

    • Jeff Id said

      Thanks Kenneth. I just read a fair bit of Melvin 04 last night and studied their signal-free approach, which seems reasonable to me. It doesn’t solve the problems with selection bias but I don’t see any issues with NEW spurious signal generation from it. It doesn’t solve problems with region-to-region or tree-to-tree variation in the base growth curve either. Fitting the same curve to trees in potentially different situations is a great way to create a blade on a stick having only old trees (or even mostly old trees) tested in recent years.

  5. Kenneth Fritsch said

    “even for those of us for whom it is our first language.”

    Whose to say we all have got a first language?

  6. Kenneth Fritsch said

    Is anyone here aware of how the noise level of the TRW measurements enters into any of the calculations of CIs for temperature reconstructions? When I was looking at raw TRW data I noted how much variation I saw in those measurements for a given tree. I have not looked at raw MXD measurements for the same tree but I would guess that whatever causes the width variation could translate to the MXD. I also noted that the sampling rate for TRW from a given tree varied depending on who made the measurements. I believe that Rob Wilson appeared invariably to take and report samples from the north, south, east and west on the measured tree. Obviously more sampling allows one to see these variations more readily.

    • Jeff Id said

      That is a pretty general question. I think most of it is just done by the standard deviation at that year but my recollection is that Mann08 did some fancy stuff.

      • Kenneth Fritsch said

        I think from TR data sets I have seen lately that those doing the temperature reconstructions use an average TRW value for an individual tree taken from the data sets. In the past I recall seeing more detailed data sets where the individual tree multiple samples were shown. I have attempted to go back and find the detailed sampling of individual trees but on the first pass I have found what I suspect are the averaged readings for individual trees. When you start with an averaged value you lose the variance of the individual readings.

        • Kenneth Fritsch said

          Jeff, as I was noting in a previous post at this thread, I recalled that multiple cores of trees could have largely varying results. In order to show that I went to The International Tree-Ring Data Bank at this link:


          I found the following series of TRW and MXD raw measurements here:

          There was not a good ReadMe file for these data but I have to assume that what I found was paired TRW and MXD on the same trees. I calculated the correlation for the pairs of samples from each tree for MXD and TRW and the trends for each of pairs for MXD and TRW. The results are summarized in table form in the first link below and in graphical form for TRW in the second listed link below and for MXD in third listed link below. It should be noted that the MXD graphs have Tree Ring Width on the x axis lable and that should be Maximum Density.

          If my assumptions are correct these results, selected by random, show that in some cases the 2 cores from the same tree can have good correlation and nearly equal trends, but that in most cases there is rather poor agreement for correlation and trends amongst pairs. It also shows that a good correlation does not lead to the pairs have reasonably close trends. The TRW appear to have in general somewhat better correlations than MXD. Obviously the trends are not necessarily what the final chronology would have but since whatever adjustments are required would be the same for cores from the same tree so the differences are significant and not considered to be adjusted away. In my mind the trends are more critical to end use of a tree proxy than any correlation between pairs.

  7. […] is to historic temps in the recorded period.   First, recall that I made this red series above by simply aligning and averaging the data.  I did this simple process with the understanding that some of the variance we see in these MXD […]

  8. […] low-pass filtering the signal.  Spline or other fits make little difference.   For this data, we did demonstrate previously that there is a signal in the growth curve that should to be corrected for, still some may not like […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: