Import data

setwd("C:\\Users\\Jack\\Documents\\AB\\PVA MS Sturgeon 2019")
dat <- read.csv("sturgeon_length_data.csv")
head(dat)

How many rows are there?

nrow(dat)
[1] 6683

Weight imported as a factor, but this should be numeric.

dat$weight <- as.numeric(as.character(dat$weight))
NAs introduced by coercion

In the Excel sheet, NA’s were entered as the character “.”, but this gets converted to NA correctly.

How many NA’s are there for weight?

sum(is.na(dat$weight))
[1] 4628

Check this sum against the original file sum of 4459.28198.

sum(dat$weight, na.rm = TRUE)
[1] 4459.282

The sum matches.

The data are from an Excel spreadsheet. The Excel date has an origin of December 30, 1899, and needs to be converted for R.

dat$date <- as.Date(dat$date, origin = "1970-01-01")

Now check the data set again.

head(dat)

Aggregate data

dat2 <- aggregate(dat$numberCaught, by = list(species = dat$species, riverMile = dat$riverMile), FUN = sum)
head(dat2)
plot(dat2$riverMile[dat2$species == "PALLID"], dat2$x[dat2$species == "PALLID"])

fitPallid <- lm(dat2$x[dat2$species == "PALLID"] ~ dat2$riverMile[dat2$species == "PALLID"])
summary(fitPallid)

Call:
lm(formula = dat2$x[dat2$species == "PALLID"] ~ dat2$riverMile[dat2$species == 
    "PALLID"])

Residuals:
    Min      1Q  Median      3Q     Max 
-2.3616 -1.6425 -0.5549  0.4432 13.6356 

Coefficients:
                                          Estimate Std. Error t value Pr(>|t|)    
(Intercept)                              2.4116642  0.5929325   4.067  0.00011 ***
dat2$riverMile[dat2$species == "PALLID"] 0.0008329  0.0008900   0.936  0.35214    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.499 on 81 degrees of freedom
Multiple R-squared:  0.0107,    Adjusted R-squared:  -0.001517 
F-statistic: 0.8758 on 1 and 81 DF,  p-value: 0.3521

No significant trend for pallid sturgeon.

plot(dat2$riverMile[dat2$species == "SHOVELNOSE"], dat2$x[dat2$species == "SHOVELNOSE"])

fitShovel <- lm(dat2$x[dat2$species == "SHOVELNOSE"] ~ dat2$riverMile[dat2$species == "SHOVELNOSE"])
summary(fitShovel)

Call:
lm(formula = dat2$x[dat2$species == "SHOVELNOSE"] ~ dat2$riverMile[dat2$species == 
    "SHOVELNOSE"])

Residuals:
    Min      1Q  Median      3Q     Max 
 -72.36  -31.21  -12.70    5.48 1079.78 

Coefficients:
                                              Estimate Std. Error t value Pr(>|t|)   
(Intercept)                                  -14.02203   18.78971  -0.746  0.45652   
dat2$riverMile[dat2$species == "SHOVELNOSE"]   0.07892    0.02663   2.964  0.00347 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 101.5 on 173 degrees of freedom
Multiple R-squared:  0.04832,   Adjusted R-squared:  0.04282 
F-statistic: 8.783 on 1 and 173 DF,  p-value: 0.003468

There is a significant trend for shovelnose sturgeon, but this might only be due to the two extremely large observations far upstream.

LS0tDQp0aXRsZTogIlN0dXJnZW9uIGNhdGNoIHBlciB1bml0IGVmZm9ydCBwZXIgcml2ZXIgbWlsZSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIyBJbXBvcnQgZGF0YQ0KDQpgYGB7cn0NCnNldHdkKCJDOlxcVXNlcnNcXEphY2tcXERvY3VtZW50c1xcQUJcXFBWQSBNUyBTdHVyZ2VvbiAyMDE5IikNCmRhdCA8LSByZWFkLmNzdigic3R1cmdlb25fbGVuZ3RoX2RhdGEuY3N2IikNCmhlYWQoZGF0KQ0KYGBgDQoNCkhvdyBtYW55IHJvd3MgYXJlIHRoZXJlPw0KYGBge3J9DQpucm93KGRhdCkNCmBgYA0KDQoNCldlaWdodCBpbXBvcnRlZCBhcyBhIGZhY3RvciwgYnV0IHRoaXMgc2hvdWxkIGJlIG51bWVyaWMuDQpgYGB7cn0NCmRhdCR3ZWlnaHQgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoZGF0JHdlaWdodCkpDQpgYGANCg0KSW4gdGhlIEV4Y2VsIHNoZWV0LCBOQSdzIHdlcmUgZW50ZXJlZCBhcyB0aGUgY2hhcmFjdGVyICIuIiwgYnV0IHRoaXMgZ2V0cyBjb252ZXJ0ZWQgdG8gTkEgY29ycmVjdGx5Lg0KDQpIb3cgbWFueSBOQSdzIGFyZSB0aGVyZSBmb3Igd2VpZ2h0Pw0KYGBge3J9DQpzdW0oaXMubmEoZGF0JHdlaWdodCkpDQpgYGANCg0KQ2hlY2sgdGhpcyBzdW0gYWdhaW5zdCB0aGUgb3JpZ2luYWwgZmlsZSBzdW0gb2YgNDQ1OS4yODE5OC4NCmBgYHtyfQ0Kc3VtKGRhdCR3ZWlnaHQsIG5hLnJtID0gVFJVRSkNCmBgYA0KDQpUaGUgc3VtIG1hdGNoZXMuDQoNClRoZSBkYXRhIGFyZSBmcm9tIGFuIEV4Y2VsIHNwcmVhZHNoZWV0LiBUaGUgRXhjZWwgZGF0ZSBoYXMgYW4gb3JpZ2luIG9mIERlY2VtYmVyIDMwLCAxODk5LCBhbmQgbmVlZHMgdG8gYmUgY29udmVydGVkIGZvciBSLg0KYGBge3J9DQpkYXQkZGF0ZSA8LSBhcy5EYXRlKGRhdCRkYXRlLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpDQpgYGANCg0KTm93IGNoZWNrIHRoZSBkYXRhIHNldCBhZ2Fpbi4NCmBgYHtyfQ0KaGVhZChkYXQpDQpgYGANCg0KIyMjIEFnZ3JlZ2F0ZSBkYXRhDQoNCmBgYHtyfQ0KZGF0MiA8LSBhZ2dyZWdhdGUoZGF0JG51bWJlckNhdWdodCwgYnkgPSBsaXN0KHNwZWNpZXMgPSBkYXQkc3BlY2llcywgcml2ZXJNaWxlID0gZGF0JHJpdmVyTWlsZSksIEZVTiA9IHN1bSkNCmhlYWQoZGF0MikNCmBgYA0KDQpgYGB7cn0NCnBsb3QoZGF0MiRyaXZlck1pbGVbZGF0MiRzcGVjaWVzID09ICJQQUxMSUQiXSwgZGF0MiR4W2RhdDIkc3BlY2llcyA9PSAiUEFMTElEIl0pDQpgYGANCg0KYGBge3J9DQpmaXRQYWxsaWQgPC0gbG0oZGF0MiR4W2RhdDIkc3BlY2llcyA9PSAiUEFMTElEIl0gfiBkYXQyJHJpdmVyTWlsZVtkYXQyJHNwZWNpZXMgPT0gIlBBTExJRCJdKQ0Kc3VtbWFyeShmaXRQYWxsaWQpDQpgYGANCg0KTm8gc2lnbmlmaWNhbnQgdHJlbmQgZm9yIHBhbGxpZCBzdHVyZ2Vvbi4NCg0KDQpgYGB7cn0NCnBsb3QoZGF0MiRyaXZlck1pbGVbZGF0MiRzcGVjaWVzID09ICJTSE9WRUxOT1NFIl0sIGRhdDIkeFtkYXQyJHNwZWNpZXMgPT0gIlNIT1ZFTE5PU0UiXSkNCmBgYA0KDQpgYGB7cn0NCmZpdFNob3ZlbCA8LSBsbShkYXQyJHhbZGF0MiRzcGVjaWVzID09ICJTSE9WRUxOT1NFIl0gfiBkYXQyJHJpdmVyTWlsZVtkYXQyJHNwZWNpZXMgPT0gIlNIT1ZFTE5PU0UiXSkNCnN1bW1hcnkoZml0U2hvdmVsKQ0KYGBgDQoNClRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgdHJlbmQgZm9yIHNob3ZlbG5vc2Ugc3R1cmdlb24sIGJ1dCB0aGlzIG1pZ2h0IG9ubHkgYmUgZHVlIHRvIHRoZSB0d28gZXh0cmVtZWx5IGxhcmdlIG9ic2VydmF0aW9ucyBmYXIgdXBzdHJlYW0u