Open ngoj1 opened 5 months ago
@ngoj1 Thanks for your work on this! It looks like GHCN has a gap in the data. Is that correct? That's understandable and not a big deal. I suggest plotting the GHCN versus EnvCanada max and min daily temperatures with a 1:1 line on top to really compare though. I suspect they are similar enough though...
If you could put the summary(lm()) output for each 3 month period in this issue for both min and max temperatures (so 8 total), that would be helpful. Please bracket your code using the<>
in the menu so it is easier to read.
@ngoj1 There are lots of ways to make GDD -- here's some code with one example in it and I bet Deirdre, Mao and Ken have other examples. I would use 5 C as your base temperature, but make it easy to change that.
Yes. there is indeed a gap in the GHCN data unfortunately.
plotting the GHCN versus EnvCanada max and min daily temperatures with a 1:1 line on top to really compare though.
Minimum temperature comparison:
Maximum temperature comparison:
put the summary(lm()) output for each 3 month period in this issue for both min and max temperatures (so 8 total), that would be helpful.
(I wasn't sure what you meant by <> in the menu so I used backticks instead, please let me know how to format it the way you like!)
> # winter temp trend
> summary(lm(min_temperature~year, szn.winter))
Call:
lm(formula = min_temperature ~ year, data = szn.winter)
Residuals:
Min 1Q Median 3Q Max
-2.6643 -0.5558 0.2035 0.7282 2.0898
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.7953936 38.6204114 0.046 0.963
year -0.0001778 0.0192378 -0.009 0.993
Residual standard error: 1.101 on 32 degrees of freedom
Multiple R-squared: 2.67e-06, Adjusted R-squared: -0.03125
F-statistic: 8.545e-05 on 1 and 32 DF, p-value: 0.9927
> summary(lm(max_temperature~year, szn.winter))
Call:
lm(formula = max_temperature ~ year, data = szn.winter)
Residuals:
Min 1Q Median 3Q Max
-1.5435 -0.5106 0.1900 0.4724 2.1768
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 54.88575 31.70064 1.731 0.093 .
year -0.02380 0.01579 -1.507 0.142
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.9033 on 32 degrees of freedom
Multiple R-squared: 0.06627, Adjusted R-squared: 0.0371
F-statistic: 2.271 on 1 and 32 DF, p-value: 0.1416
> # winter temp trend
> summary(lm(min_temperature~year, szn.winter))
Call:
lm(formula = min_temperature ~ year, data = szn.winter)
Residuals:
Min 1Q Median 3Q Max
-2.6643 -0.5558 0.2035 0.7282 2.0898
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.7953936 38.6204114 0.046 0.963
year -0.0001778 0.0192378 -0.009 0.993
Residual standard error: 1.101 on 32 degrees of freedom
Multiple R-squared: 2.67e-06, Adjusted R-squared: -0.03125
F-statistic: 8.545e-05 on 1 and 32 DF, p-value: 0.9927
> summary(lm(max_temperature~year, szn.winter))
Call:
lm(formula = max_temperature ~ year, data = szn.winter)
Residuals:
Min 1Q Median 3Q Max
-1.5435 -0.5106 0.1900 0.4724 2.1768
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 54.88575 31.70064 1.731 0.093 .
year -0.02380 0.01579 -1.507 0.142
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.9033 on 32 degrees of freedom
Multiple R-squared: 0.06627, Adjusted R-squared: 0.0371
F-statistic: 2.271 on 1 and 32 DF, p-value: 0.1416
> # spring temp trend
> summary(lm(min_temperature~year, szn.spring))
Call:
lm(formula = min_temperature ~ year, data = szn.spring)
Residuals:
Min 1Q Median 3Q Max
-1.36269 -0.48305 -0.01212 0.55348 1.63382
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 22.226849 27.480258 0.809 0.425
year -0.008058 0.013692 -0.588 0.560
Residual standard error: 0.7489 on 31 degrees of freedom
Multiple R-squared: 0.01105, Adjusted R-squared: -0.02085
F-statistic: 0.3463 on 1 and 31 DF, p-value: 0.5605
> summary(lm(max_temperature~year, szn.spring))
Call:
lm(formula = max_temperature ~ year, data = szn.spring)
Residuals:
Min 1Q Median 3Q Max
-1.74018 -0.66461 0.01279 0.64879 1.86532
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 26.396168 34.182074 0.772 0.446
year -0.006449 0.017031 -0.379 0.708
Residual standard error: 0.9316 on 31 degrees of freedom
Multiple R-squared: 0.004604, Adjusted R-squared: -0.02751
F-statistic: 0.1434 on 1 and 31 DF, p-value: 0.7075
> # summer temp trend
> summary(lm(min_temperature~year, szn.summer))
Call:
lm(formula = min_temperature ~ year, data = szn.summer)
Residuals:
Min 1Q Median 3Q Max
-0.7776 -0.3275 -0.1072 0.3409 1.0277
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -19.316338 18.398789 -1.050 0.3019
year 0.016288 0.009167 1.777 0.0854 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5014 on 31 degrees of freedom
Multiple R-squared: 0.09243, Adjusted R-squared: 0.06315
F-statistic: 3.157 on 1 and 31 DF, p-value: 0.08541
> summary(lm(max_temperature~year, szn.summer))
Call:
lm(formula = max_temperature ~ year, data = szn.summer)
Residuals:
Min 1Q Median 3Q Max
-1.10518 -0.56197 0.00009 0.40499 1.68852
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -50.51392 27.34951 -1.847 0.0743 .
year 0.03595 0.01363 2.638 0.0129 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7454 on 31 degrees of freedom
Multiple R-squared: 0.1834, Adjusted R-squared: 0.157
F-statistic: 6.961 on 1 and 31 DF, p-value: 0.01292
> # autumn temp trend
> summary(lm(min_temperature~year, szn.autumn))
Call:
lm(formula = min_temperature ~ year, data = szn.autumn)
Residuals:
Min 1Q Median 3Q Max
-0.95986 -0.48659 -0.01251 0.39160 1.11886
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -4.927662 21.517218 -0.229 0.820
year 0.006096 0.010721 0.569 0.574
Residual standard error: 0.5864 on 31 degrees of freedom
Multiple R-squared: 0.01032, Adjusted R-squared: -0.0216
F-statistic: 0.3233 on 1 and 31 DF, p-value: 0.5737
> summary(lm(max_temperature~year, szn.autumn))
Call:
lm(formula = max_temperature ~ year, data = szn.autumn)
Residuals:
Min 1Q Median 3Q Max
-1.5697 -0.3417 0.1006 0.2462 1.2242
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.884375 20.995753 0.090 0.929
year 0.006043 0.010461 0.578 0.568
Residual standard error: 0.5722 on 31 degrees of freedom
Multiple R-squared: 0.01065, Adjusted R-squared: -0.02126
F-statistic: 0.3337 on 1 and 31 DF, p-value: 0.5677>
@ngoj1 There are lots of ways to make GDD -- here's some code with one example in it and I bet Deirdre, Mao and Ken have other examples. I would use 5 C as your base temperature, but make it easy to change that.
Thank you for this!
@ngoj1 This looks good! It seems like there is basically no evidence of temperature trends over time except in the summer and then minima are increasing 0.16 C per decade (DF (1,31), p=0.085) and maxima are increasing 0.4 C per decade (DF (1,31), p=0.013). This very similar to what Ken found using different data and looking across southern BC, in case you want to compare notes with him.
I tried using the for loop you wrote me and made some adjustments after looking up more instructions since it wouldn't run for me, like so:
for(i in c(1:nrow(dmag))) {
match_row <- which(dtemp$year == dmag$year[i] & dtemp$doy == dmag$DOY[i])
if (length(match_row) > 0) {
dmag$gdd[i] <- dtemp$gddAccumulate[match_row]
} else {
dmag$gdd[i] <- NA
}
}
where dmag = the phenology data, dtemp = the temperature and original GDD data, and dtemp$gddAccumulate = the column in dtemp where the accumulated gdd hours are calculated.
I also double checked 5 random dates to make sure the GDDs loaded into the original data are the same as the ones calculated from the temperature data, and they are!
Some notes:
Hi Lizzie,
Here's an update on the climate data for the Magnolia project. Please feel free to respond whenever you can because I think the garden is highly preoccupied with other business right now anyway.
Here's what I've found when comparing the original temperate dataset from Environment Canada with the GHCN data:
I tried comparing with data from Tsawwassen as it was one of the only few other weather stations that had data spanning from the mid 1900s to 2024, but I think the distance is too far and that reflected in the warmer T_avg values (by around 3 degC on average).
I then looked at GHCN data for the airport to see if it was the same as what I had initially used, and found this:
The second image displays the difference between the daily T_avg values reported by GHCN and Environment Canada, showing that their datasets either merged or one took over sometime during 2002.
I'm probably interpreting this wrong because I remember getting hounded by my TA in BIOL 412 about F-statistic and p-values for linear regressions, but it seems that only summer had a significant non-zero slope (F-statistic p-value of 0.0231 for alpha = 0.05). Here's what the console says:
`> summary(summermodel)
Call: lm(formula = avg_temperature ~ year, data = szn.summer)
Residuals: Min 1Q Median 3Q Max -0.87576 -0.48210 0.03165 0.22950 1.35813
Coefficients: Estimate Std. Error t value Pr(>|t|)
(Intercept) -34.89129 21.92107 -1.592 0.1216
year 0.02611 0.01092 2.390 0.0231 *
Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5974 on 31 degrees of freedom Multiple R-squared: 0.1556, Adjusted R-squared: 0.1284 F-statistic: 5.713 on 1 and 31 DF, p-value: 0.0231`
Thank you very much! Hope you are enjoying your time abroad.