##REPLICATION ANALYSIS OF JUCKES CVM ##LOAD DATA FROM COLLATIONS mitrie.data<-"http://www.climateaudit.org/data/mitrie" read.table( file.path(mitrie.data,"juckes.proxy.txt"),sep="\t",header=TRUE) juckes.proxy<-ts(read.table( file.path(mitrie.data,"juckes.proxy.txt"),sep="\t",header=TRUE),start=1000) dim(juckes.proxy) #[1] 991 42 mask.union<-c(1,0,0,1,1,rep(0,8),1,1,1,0,0, rep(0,8),1,0,0,1,1, 0,1,1,0,1,1,1,1,1,1,1) mask.union<-(mask.union==1) juckes.recon<-ts(read.table(file.path(mitrie.data,"juckes.recon.txt"),sep="\t",header=TRUE),start=1000) #this is a subset of 12 cvm reconstructions dim(juckes.recon) #[1] 986 14: series 1-6,27-34 dimnames(juckes.recon)[[2]][9]<-"mbh.mbh" mbhpc<-ts(read.table(file.path(mitrie.data,"juckes.mbhpc.txt"),sep="\t",header=TRUE),start=1000) #this is a subset of 12 cvm reconstructions dim(mbhpc) # 981 15 instr<-ts(read.table(file.path(mitrie.data,"juckes.instr.txt"),skip=1)[,2],start=1856) instr<-instr-mean(instr[(1856:1980)-1855]) mean.obs<-mean(instr[(1856:1980)-1855]);mean.obs # -0.181032 sd.obs<-sd(instr[1:130]);sd.obs# 0.1805515 mean.obs.modern<-mean(instr[(1902:1980)-1855]) sd.obs.modern<-sd(instr[(1902:1980)-1855]) use0<-"pairwise.complete.obs" #### FUNCTION TO DO JUCKES CVM ON 1856-1980 period #centered instr on 1856-1980 #scaled proxy series on something close to the entire series #averaged scaled proxies #re-scaled to mean and sd of target in 1856-1990 period juckes.cvm<-function(recon,target=instr, period= 1856:1980) { sd.target<-sd(target[period-1855],na.rm=T);mean.target<-mean(target[period-1855],na.rm=T) m0<-apply(recon,2,mean,na.rm=T);sd0<-apply(recon,2,sd,na.rm=T) recon.scale<-scale(recon,center=m0,scale=sd0) recon.comp<-ts(apply(recon.scale,1,mean,na.rm=T),start=1000) mean.est<-mean(recon.comp[(1856:1980)-999],na.rm=T); sd.est<-sd(recon.comp[(1856:1980)-999],na.rm=T); juckes.rescale<- (recon.comp-mean.est)*sd.target/sd.est+mean.target juckes.cvm<-ts(juckes.rescale,start=1000) juckes.cvm } ##verification state #calibration and verificaiton are both vectors of length 2 with start and end period #estimator and observed are time series which may have different start and end periods verification.stats<-function(estimator,observed,calibration,verification) { combine<-ts.union(estimator,observed) index.cal<- (calibration[1]-tsp(combine)[1]+1):(calibration[2]-tsp(combine)[1]+1) index.ver<-(verification[1]-tsp(combine)[1]+1):(verification[2]-tsp(combine)[1]+1) xmean<-mean ( combine[index.cal,"observed"],na.rm=TRUE ) mx<-mean( combine[index.ver,"observed"],na.rm=TRUE ) # test.ver<-cov ( combine[index.ver,],use=use0) test<-cov(combine[index.cal,],use=use0) R2.cal<-(test[1,2]*test[2,1])/(test[1,1]*test[2,2]) R2.ver<-(test.ver[1,2]*test.ver[2,1])/(test.ver[1,1]*test.ver[2,2]) RE.cal<-1-sum( (combine[index.cal,"estimator"]- combine[index.cal,"observed"]) ^2,na.rm=TRUE)/sum( (xmean- combine[index.cal,"observed"]) ^2,na.rm=TRUE) RE.ver<-1-sum( (combine[index.ver,"estimator"]- combine[index.ver,"observed"]) ^2,na.rm=TRUE)/sum( (xmean- combine[index.ver,"observed"]) ^2,na.rm=TRUE) RE.risk<- - sum( combine[index.ver,"estimator"]^2,na.rm=TRUE)/sum( (xmean- combine[index.cal,"observed"]) ^2,na.rm=TRUE) RE.bias<- 2*length(index.ver) * mean(combine[index.ver,"estimator"],na.rm=TRUE)*mean(combine[index.ver,"observed"],na.rm=TRUE)/sum( (xmean- combine[index.cal,"observed"]) ^2,na.rm=TRUE) RE.covar<- 2* (length(index.ver)-1)* cov(combine[index.ver,],use="pairwise.complete.obs")[1,2]/sum( (xmean- combine[index.ver,"observed"]) ^2,na.rm=TRUE) CE<- 1-sum( (combine[index.ver,"estimator"]- combine[index.ver,"observed"]) ^2,na.rm=TRUE)/sum( (mx- combine[index.ver,"observed"]) ^2,na.rm=TRUE) test<-sign(diff(combine[index.ver,],lag=1)) temp<- ( test[,1]*test[,2] ==1)&!is.na(test[,1])&!is.na(test[,2]) sign.test<-sum(temp)/length(index.ver) test1<-scale(combine[index.ver,],scale=FALSE) test1<-test1[!is.na(test1[,1])&!is.na(test1[,2]),] temp<-sign(test1) temp<-(temp[,1]*temp[,2]==1) test2<-test1[,1]*test1[,2] if(sum(!temp) >0) prod.test<- ( mean(test2[temp])+mean(test2[!temp]))/ sqrt( var(test2[temp])/sum(temp) + var(test2[!temp])/sum(!temp) ) else prod.test<-NA verification.stats<-data.frame(RE.cal,RE.ver,R2.cal,R2.ver,CE) names(verification.stats)<-c( "RE.cal","RE.ver","R2.cal","R2.ver","CE") verification.stats } ############## ###CVM REPLICATIONS #ESPER #this is close to being an exact replication x<-juckes.cvm(juckes.proxy[,1:5]) cor(x[1:981],juckes.recon[1:981,"esp"]) #0.9999748 range(x[1:981]-juckes.recon[1:981,"esp"]) # -0.002941478 0.006920406 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.3271132 0.1108211 0.4443662 2.560282e-05 -0.9997 y<-juckes.cvm(juckes.proxy[,1:5],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"esp"]) # 0.02813373 0.07260242 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.2209708 0.06377226 0.4443662 2.560282e-05 -1.105509 ##JONES VERSION #close to beiing exact replication; x<-juckes.cvm(juckes.proxy[,14:19]) cor(x[1:981],juckes.recon[1:981,"jbb"]) # 0.9999976 range(x[1:981]-juckes.recon[1:981,"jbb"]) # 0.0004505914 0.0032913876 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 -0.04662157 -0.3543274 0.2033287 0.003717192 -2.045786 y<-juckes.cvm(juckes.proxy[,14:19],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"jbb"]) # 0.03693302 0.07411226 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 -0.07321108 -0.60883 0.2033287 0.003717192 -2.618144 ##MOBERG # juckes only uses 10 of 18 series ##EXCLUSIONS: Agassiz melt %; Conroy Lake; CAroib dO18; Tsuolmajavri seds; noorway stalagmites x<-juckes.cvm(juckes.proxy[,33:42]) cor(x[1:981],juckes.recon[1:981,"mob"]) # 0.9994866 range(x[1:981]-juckes.recon[1:981,"mob"]) # -0.01722358 0.05107538 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.2810808 0.1807196 0.4140013 0.000377755 -0.842503 y<-juckes.cvm(juckes.proxy[,33:42],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"mob"]) # -0.01722358 0.05107538 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.1572667 0.1129344 0.4140013 0.000377755 -0.9949471 ## HEGERL VERSION #uses 8 of 12 series x<-juckes.cvm(juckes.proxy[,6:13]) cor(x[1:981],juckes.recon[1:981,"heg"],use=use0) # 0.999976 range(x[1:981]-juckes.recon[1:981,"heg"],na.rm=T) # -0.12590840 0.06052669 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.2647138 0.3469992 0.3710519 0.001581812 -0.4685522 y<-juckes.cvm(juckes.proxy[,6:13],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"heg"],na.rm=T) # -0.06707407 0.10158372 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 -0.006437822 0.4776553 0.3710519 0.001581812 -0.174716 ###UNION x<-juckes.cvm(juckes.proxy[,mask.union]) cor(x[1:981],juckes.recon[1:981,1],use=use0) # 0.9571912 range(x[1:981]-juckes.recon[1:981,1],na.rm=T) # -0.1771066 0.2035681 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.4302951 0.2111388 0.4929897 0.000935686 -0.7740926 y<-juckes.cvm(juckes.proxy[,mask.union],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,1],na.rm=T) # -0.1323312 0.2575028 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.2593817 0.2265113 0.4929897 0.000935686 -0.7395209 ###MBH VERSIONS #mbh: using the standardisation of mbh: centred and standardised on detrended-variance of last 79 years. #mbhx: centred and standardised on variance of last 79 years #mbhl: centred and standardised on detrended-variance of last 125 years #cen: centred on the whole period. #std: centred and normalised on the whole period. #recon versions in NC #3 "mr_mbh_1000_cvm_nht_01.02.001 #27] "mr_mbh_1000_cvm_nht_01.02.001_ff" #"mr_mbh_1000_cvm_nht_01.02.001_pc" #[29] "mr_mbhx_1000_cvm_nht_01.02.001_mbh" #"mr_mbhx_1000_cvm_nht_01.02.001_mbhx" #[31] "mr_mbhx_1000_cvm_nht_01.02.001_std" #"mr_mbhx_1000_cvm_nht_01.02.001_cen" ###MBH99 PROXIES IN JUCKES COLLATION #20 mbh99_01 "ITRDB [pc01]" 40.00 -110.00 #21 mbh99_02 "ITRDB [pc02]" 42.00 -108.00 #22 mbh99_03 "ITRDB [pc03]" 44.00 -105.00 #23 mbh99_04 Fennoscandia 68.00 23.00 #24 mbh99_05 "Northern Urals (Russia)" 67.00 65.00 #25 mbh99_06 Tasmania -43.00 148.00 #26 mbh99_07 "North Patagonia" -38.00 -68.00 #27 mbh99_08 Morocco 33.00 -5.00 #28 mbh99_09 France 44.00 7.00 #29 mbh99_10 "Greenland stack" 77.00 -60.00 #30 mbh99_11 "Quelcaya 2 [do18] (Peru)" -14.00 -71.00 #31 mbh99_12 "Quelcaya 2 [accum] (Peru)" -14.00 -71.00 #32 mbh99_13 "ITRDB [pc01-fixed]" 40.00 -110.00 ##3 mbh juckes.proxy[,32]<- - juckes.proxy[,32] #this has inverse orientation; Juckes seems to have flipped mbh<-data.frame(juckes.proxy[1:981,20:32]) mbh$juckes.recon<-juckes.recon[1:981,"mbh"] fm<-lm(juckes.recon~.,data=mbh); summary(fm) #0.9901 #uses unfixed PC1 and doesn't use French x<-juckes.cvm(juckes.proxy[,c(20:27,29:31)]) cor(x[1:981],juckes.recon[1:981,"mbh"],use=use0) # 0.9999922 range(x[1:981]-juckes.recon[1:981,"mbh"],na.rm=T) # -0.002300698 0.003366939 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE # 0.1811158 0.07947428 0.3069180 0.008832546 -1.070197 apply(ts(cbind(juckes.recon[1:981,"mbh"],x[1:981])[401:981,],start=1400),2,hockeystat) #0.7935410 0.7931016 y<-juckes.cvm(juckes.proxy[,c(20:27,29:31)],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"mbh"],na.rm=T) # 0.03342931 0.06753101 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE # 0.03520699 0.03913884 0.3069180 0.008832546 -1.160908 #experiment with adjusted PC1 x<-juckes.cvm(juckes.proxy[,c(21:27,29:32)]) cor(x[1:981],juckes.recon[1:981,"mbh"],use=use0) # 0.9923978 range(x[1:981]-juckes.recon[1:981,"mbh"],na.rm=T) # -0.06820465 0.01441390 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.1604182 0.05161465 0.2935656 0.007835995 -1.132851 y<-juckes.cvm(juckes.proxy[,c(21:27,29:32)],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"mbh"],na.rm=T) # -0.03060229 0.06987695 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.01934374 0.001747453 0.2935656 0.007835995 -1.244999 ##27 ff mbh$juckes.recon<-juckes.recon[1:981,"mbh.ff"] fm<-lm(juckes.recon~.,data=mbh); summary(fm) #1 #all coefficients significant sign(coef(fm)[2:14]) x<-juckes.cvm(juckes.proxy[,c(20:31)]) cor(x[1:981],juckes.recon[1:981,"mbh.ff"],use=use0) # 0.9946571 range(x[1:981]-juckes.recon[1:981,"mbh.ff"],na.rm=T) # -0.05710542 0.06539993 hockeystat(x[401:981]) # 0.78005 ##28 pc ##ACTUALLY USEES THE ADJUSTED PC In INVERSE ORIENTATION #"using the unadjusted first proxy PC" (SI) #fixed is very signif , but unfixed and FF not. mbh$juckes.recon<-juckes.recon[1:981,"mbh.pc"] fm<-lm(juckes.recon~.,data=mbh); summary(fm) #1 #all coefficients significant test<-sign(coef(fm)[2:14]);test #signs are negative juckes.proxy[,32]<- - juckes.proxy[,32] x<-juckes.cvm(juckes.proxy[,c(21:27,29:32)] ) cor(x[1:981],juckes.recon[1:981,"mbh.pc"],use=use0) # 0.996316 range(x[1:981]-juckes.recon[1:981,"mbh.pc"],na.rm=T) # -0.06124918 0.04351853 verification.stats(juckes.recon[,"mbh.pc"],instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 -0.2389676 -0.4749557 0.1275101 0.0003291195 -2.31707 plot.ts(juckes.proxy[,32]) #goes down y<-juckes.cvm(juckes.proxy[,c(21:27,29:32)], period = 1902:1980 ) range(y[1:981]-juckes.recon[1:981,"mbh.cen"],na.rm=T) # -0.3177950 0.7641141 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 -0.2152933 -0.7526093 0.1434093 0.0001599457 -2.941493 #SERIES #30 mr_mbhx_1000_cvm_nht_01.02.001_mbh #juckes has re-calculated Mannian PCs with network of 25 sites, a little different (Meth Walk and Upper Timber Creek excluded) mbh[,1:3]<-scale(mbhpc[,1:3]) dimnames(juckes.recon)[[2]][9]<-"mbh.mbh" #need to correct typo mbh$juckes.recon<-juckes.recon[1:981,"mbh.mbh"] fm<-lm(juckes.recon~.,data=mbh); summary(fm)# 1 - exclude FF and fixed test<-sign(coef(fm)[2:14]);test #signs are negative #all 3 series need to be flipped juckes.proxy[1:981,20:22]<-scale( mbhpc[,1:3]) %*% diag(test[1:3]) #flip PC1 x<-juckes.cvm(juckes.proxy[,c(20:27,29:31)]) cor(x[1:981],juckes.recon[1:981,"mbh.mbh"],use=use0) # 0.9966689 range(x[1:981]-juckes.recon[1:981,"mbh.mbh"],na.rm=T) # -0.05385986 0.04657380 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.1473276 0.04816851 0.2849341 0.007827001 -1.140601 y<-juckes.cvm(juckes.proxy[,c(20:27,29:31)],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"mbh.mbh"],na.rm=T) # -0.005681306 0.092503578 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.005483209 -0.00119791 0.2849341 0.007827001 -1.251623 ##SERIES 31 mr_mbhx_1000_cvm_nht_01.02.001_mbhx mbh[,1:3]<-scale(mbhpc[,4:6]) mbh$juckes.recon<-juckes.recon[1:981,"mbh.mbhx"] fm<-lm(juckes.recon~.,data=mbh); summary(fm)# 1 - exclude FF and fixed test<-sign(coef(fm)[2:14]);test #signs are negative #all 3 series need to be flipped juckes.proxy[1:981,20:22]<-scale( mbhpc[,4:6]) %*% diag(test[1:3]) #flip PC1 x<-juckes.cvm(juckes.proxy[,c(20:27,29:31)]) cor(x[1:981],juckes.recon[1:981,"mbh.mbhx"],use=use0) # 0.9946925 range(x[1:981]-juckes.recon[1:981,"mbh.mbhx"],na.rm=T) # -0.06268450 0.05174334 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.1732148 0.05191625 0.3022168 0.007329935 -1.132173 y<-juckes.cvm(juckes.proxy[,c(20:27,29:31)],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"mbh.mbh"],na.rm=T) #-0.01006125 0.10059117 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE # 0.0331243 0.001098856 0.3022168 0.007329935 -1.246457 ##SERIES 32 mr_mbhx_1000_cvm_nht_01.02.001_std mbh[,1:3]<-scale(mbhpc[,10:12]) mbh$juckes.recon<-juckes.recon[1:981,"mbh.std"] fm<-lm(juckes.recon~.,data=mbh); summary(fm)# 1 - exclude FF and fixed test<-sign(coef(fm)[2:14]);test #signs are negative #all 3 series need to be flipped juckes.proxy[1:981,20:22]<-scale( mbhpc[,10:12]) %*% diag(test[1:3]) #flip PC1 x<-juckes.cvm(juckes.proxy[,c(20:27,29:31)]) cor(x[1:981],juckes.recon[1:981,"mbh.std"],use=use0) # 0.996779 range(x[1:981]-juckes.recon[1:981,"mbh.std"],na.rm=T) # -0.05232971 0.04596037 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.1768658 0.07617546 0.3001951 0.01012795 -1.077615 y<-juckes.cvm(juckes.proxy[,c(20:27,29:31)],period= 1902:1980) range(y[1:981]-juckes.recon[1:981,"mbh.std"],na.rm=T) # -0.003831662 0.091969220 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.02652526 0.0426081 0.3001951 0.01012795 -1.153106 ##29 mr_mbhx_1000_cvm_nht_01.02.001_cen mbh[,1:3]<-scale(mbhpc[,13:15]) mbh$juckes.recon<-juckes.recon[1:981,"mbh.cen"] fm<-lm(juckes.recon~.,data=mbh); summary(fm)# 1 - exclude FF and fixed test<-sign(coef(fm)[2:14]);test #signs are negative #uses unfixed PC1; requires flipping juckes.proxy[1:981,20:22]<-scale( mbhpc[,13:15]);juckes.proxy[,20]<- -juckes.proxy[,20] #flip PC1 x<-juckes.cvm(juckes.proxy[,c(20:27,29:31)]) cor(x[1:981],juckes.recon[1:981,"mbh.cen"],use=use0) # 0.9964463 range(x[1:981]-juckes.recon[1:981,"mbh.cen"],na.rm=T) # -0.05791347 0.04898933 verification.stats(x,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.1566515 0.03357383 0.2712022 0.01559563 -1.173423 verification.stats(juckes.recon[,"mbh.cen"],instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 0.1236341 0.009746588 0.24977 0.01409353 -1.227009 y<-juckes.cvm(juckes.proxy[,c(20:27,29:31)],period= 1902:1980) cor(y[1:981],juckes.recon[1:981,"mbh.cen"],use=use0) # 0.9964463 range(y[1:981]-juckes.recon[1:981,"mbh.cen"],na.rm=T) # -0.007181331 0.097278222 verification.stats(y,instr,c(1902,1980),c(1856,1901)) # RE.cal RE.ver R2.cal R2.ver CE #1 -0.003124697 0.01281994 0.2712022 0.01559563 -1.220097 ###COMPARE JUCKES RECON PCSs TO HIS ARCHIVE combine<-cbind(juckes.proxy[1:981,c(20,32)],mbhpc[,seq(1,13,3)]) dimnames(combine)[[2]]<-c(dimnames(juckes.proxy)[[2]][c(20,32)],dimnames(mbhpc)[[2]][seq(1,13,3)]) round(cor(combine),2) # mbh.pc1 mbh.pc1f V1 V4 V7 V10 V13 #mbh.pc1 1.00 -0.92 -0.91 -0.91 -0.91 -0.92 -0.56 #mbh.pc1f -0.92 1.00 1.00 1.00 1.00 0.97 0.59 #V1 -0.91 1.00 1.00 1.00 1.00 0.97 0.58 #V4 -0.91 1.00 1.00 1.00 1.00 0.96 0.57 #V7 -0.91 1.00 1.00 1.00 1.00 0.98 0.60 #V10 -0.92 0.97 0.97 0.96 0.98 1.00 0.71 #V13 -0.56 0.59 0.58 0.57 0.60 0.71 1.00 combine<-cbind(juckes.proxy[1:981,21],mbhpc[,seq(2,14,3)]) dimnames(combine)[[2]]<-c(dimnames(juckes.proxy)[[2]][21],dimnames(mbhpc)[[2]][seq(2,14,3)]) round(cor(combine),2) # mbh.pc2 V2 V5 V8 V11 V14 #mbh.pc2 1.00 -0.98 -0.99 -0.98 -0.91 -0.27 #V2 -0.98 1.00 1.00 1.00 0.93 0.21 #V5 -0.99 1.00 1.00 1.00 0.92 0.23 #V8 -0.98 1.00 1.00 1.00 0.93 0.19 #V11 -0.91 0.93 0.92 0.93 1.00 0.05 #V14 -0.27 0.21 0.23 0.19 0.05 1.00