setwd("C:/Users/theco/Desktop")
library(plotrix)
library(car)
## Warning: package 'car' was built under R version 3.3.3
Data <- read.csv("oxygenlightF.csv", header = TRUE)
Data
## Treatment chamber O2.flux cockles ulva
## 1 black Dark 1.1500000
## 2 black Light 1.1400000
## 3 blue Dark 1.1300000 cockles
## 4 blue Light 1.1800000 cockles
## 5 green Dark 1.5100000 cockles ulva
## 6 green Light 1.1000000 cockles ulva
## 7 yellow Dark -1.5700000 ulva
## 8 yellow Light 0.1200000 ulva
## 9 black Dark -3.6400000
## 10 black Light 1.4600000
## 11 blue Dark -0.8100000 cockles
## 12 blue Light -1.0300000 cockles
## 13 green Dark 1.4285714 cockles ulva
## 14 green Light 1.5259740 cockles ulva
## 15 blue Dark 1.3900000 cockles
## 16 blue Light 0.1200000 cockles
## 17 green Dark -3.2600000 cockles ulva
## 18 green Light -1.0800000 cockles ulva
## 19 yellow Dark -3.6800000 ulva
## 20 yellow Light -0.4200000 ulva
## 21 black Dark -1.9100000
## 22 black Light 0.0200000
## 23 blue Dark 0.4600000 cockles
## 24 blue Light 0.9700000 cockles
## 25 green Dark -3.7700000 cockles ulva
## 26 green Light -2.6700000 cockles ulva
## 27 yellow Dark -3.6600000 ulva
## 28 yellow Light 0.8200000 ulva
## 29 black Dark -2.6900000
## 30 black Light 0.5000000
## 31 blue Dark -0.2300000 cockles
## 32 blue Light -0.2800000 cockles
## 33 green Dark -0.3900000 cockles ulva
## 34 green Light 0.2400000 cockles ulva
## 35 yellow Dark -3.2100000 ulva
## 36 yellow Light -1.1000000 ulva
## 37 black Dark -1.2000000
## 38 black Light 1.0700000
## 39 blue Dark -0.6400000 cockles
## 40 blue Light 0.6700000 cockles
## 41 green Dark 0.6000000 cockles ulva
## 42 green Light -1.1500000 cockles ulva
## 43 yellow Dark -1.4100000 ulva
## 44 yellow Light 1.6200000 ulva
## 45 black Dark -2.6900000
## 46 black Light 2.4400000
## 47 blue Dark -2.7800000 cockles
## 48 blue Light -1.0600000 cockles
## 49 green Dark -0.5600000 cockles ulva
## 50 green Light -0.4100000 cockles ulva
## 51 yellow Dark -2.0616883 ulva
## 52 yellow Light 0.8847403 ulva
summary(Data)
## Treatment chamber O2.flux cockles ulva
## black :12 Dark :26 Min. :-3.7700 :24 :26
## blue :14 Light:26 1st Qu.:-1.4500 cockles:28 ulva:26
## green :14 Median :-0.3350
## yellow:12 Mean :-0.4964
## 3rd Qu.: 0.9950
## Max. : 2.4400
head(Data)
## Treatment chamber O2.flux cockles ulva
## 1 black Dark 1.15
## 2 black Light 1.14
## 3 blue Dark 1.13 cockles
## 4 blue Light 1.18 cockles
## 5 green Dark 1.51 cockles ulva
## 6 green Light 1.10 cockles ulva
#detach(Data)
attach(Data)
hist(O2.flux)

# black = nothing; blue = +c-u, yellow = -c+u, green = +c+u
### Cockles, Ulva and dO
# Interaction effect insignificant; therefore -u and +u data can be combined. See "MARI301 R 2017.R"
## ALL DATA (cockles vs no cockles?)
all.yc <- O2.flux[Data$cockles == "cockles"]
all.nc <- O2.flux[Data$cockles != "cockles"]
all.means = c(mean(all.nc), mean(all.yc))
mp <- barplot(all.means, axes=FALSE, axisnames=FALSE, ylim=c(-1.5,.5), main="All chambers, no ulva", xlab="# cockles", ylab="Oxygen flux (mM/L)")
axis(1, labels=c("0","300"), at=mp)
axis(2, at=seq(-.5,1.5,by=.5))
box()
std.error(all.yc)
## [1] 0.2782361
std.error(all.nc)
## [1] 0.3873289
SE <- matrix(c(std.error(all.nc), std.error(all.yc)), 2)
segments(mp, all.means-SE, mp, all.means+SE, lwd=2)
segments(mp-0.1, all.means-SE, mp+0.1, all.means-SE, lwd=2)
segments(mp-0.1, all.means+SE, mp+0.1, all.means+SE, lwd=2)
abline(h=0, lty=2)

# stats
leveneTest(O2.flux, Treatment)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 1.3792 0.2604
## 48
# group 3 0.9292 0.4432
shapiro.test(O2.flux)
##
## Shapiro-Wilk normality test
##
## data: O2.flux
## W = 0.9387, p-value = 0.009922
# W = 0.96253, p-value = 0.4438
model1 <- lm(O2.flux ~ Treatment)
summary(model1)
##
## Call:
## lm(formula = O2.flux ~ Treatment)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2782 -0.9333 0.0918 1.3023 2.8025
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.3625 0.4867 -0.745 0.460
## Treatmentblue 0.2975 0.6633 0.449 0.656
## Treatmentgreen -0.1293 0.6633 -0.195 0.846
## Treatmentyellow -0.7764 0.6883 -1.128 0.265
##
## Residual standard error: 1.686 on 48 degrees of freedom
## Multiple R-squared: 0.05391, Adjusted R-squared: -0.005222
## F-statistic: 0.9117 on 3 and 48 DF, p-value: 0.4424
# Residual standard error: 1.084 on 22 degrees of freedom
cockles <- Data$cockles == "cockles"
# cockles2 <- Data$Treatment == "green" | Data$Treatment == "blue"
ulva <- Data$ulva == "ulva"
model2 <- lm(O2.flux~cockles + ulva + cockles:ulva)
Anova(model2, type="III")
## Anova Table (Type III tests)
##
## Response: O2.flux
## Sum Sq Df F value Pr(>F)
## (Intercept) 1.577 1 0.5547 0.4600
## cockles 0.572 1 0.2012 0.6558
## ulva 3.617 1 1.2724 0.2649
## cockles:ulva 0.395 1 0.1389 0.7110
## Residuals 136.447 48
model3 <- lm(O2.flux~cockles+ulva)
Anova(model3, type="II")
## Anova Table (Type II tests)
##
## Response: O2.flux
## Sum Sq Df F value Pr(>F)
## cockles 2.883 1 1.0322 0.3146
## ulva 4.497 1 1.6104 0.2104
## Residuals 136.842 49
plot(model3)




# Conclusion: addition of cockles is insignificant in the absense of ulva when dark and light are taken together
# Next step: is dark significantly different than light? Should they be separately analyzed?
## ALL DATA Dark vs Light
all.d <- O2.flux[Data$chamber == "Dark"]
all.l <- O2.flux[Data$chamber == "Light"]
all.means.dvl = c(mean(all.d), mean(all.l))
mp.dvl <- barplot(all.means.dvl, axes=FALSE, axisnames=FALSE, ylim=c(-2,1), main="Dark versus light, all chambers", xlab="Chamber type", ylab="Oxygen flux (mM/L)", col=c("white", "gray"))
axis(1, labels=c("Dark", "Light"), at=mp)
axis(2, at=seq(-2,1))
box()
SE.dvl <- matrix(c(std.error(all.d), std.error(all.l)), 2)
segments(mp.dvl, all.means.dvl-SE.dvl, mp.dvl, all.means.dvl+SE.dvl, lwd=2)
segments(mp.dvl-0.1, all.means.dvl-SE.dvl, mp.dvl+0.1, all.means.dvl-SE.dvl, lwd=2)
segments(mp.dvl-0.1, all.means.dvl+SE.dvl, mp.dvl+0.1, all.means.dvl+SE.dvl, lwd=2)
abline(h=0, lty=2)

cockles <- Data$cockles == "cockles"
light <- Data$chamber == "Light"
model2 <- lm(O2.flux~cockles + light + cockles:light)
Anova(model2, type="III")
## Anova Table (Type III tests)
##
## Response: O2.flux
## Sum Sq Df F value Pr(>F)
## (Intercept) 58.838 1 31.611 9.413e-07 ***
## cockles 20.735 1 11.140 0.001639 **
## light 51.411 1 27.621 3.358e-06 ***
## cockles:light 22.485 1 12.080 0.001092 **
## Residuals 89.343 48
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Thus we have established dark is significantly different than light!
#DARK
all.yc.d <- O2.flux[Data$cockles == "cockles" & Data$chamber == "Dark"]
all.nc.d <- O2.flux[Data$cockles != "cockles" & Data$chamber == "Dark"]
all.means.d = c(mean(all.nc.d), mean(all.yc.d))
mp.d <- barplot(all.means.d, axes=FALSE, axisnames=FALSE, ylim=c(-3,1.5), xlab="Presence of cockles", ylab="Oxygen flux (mM/L)")
axis(1, labels=c("No (-c)","Yes (+c)"), at=mp)
axis(2, at=seq(-3,1.5,by=0.5))
box()
SE.d <- matrix(c(std.error(all.nc.d), std.error(all.yc.d)), 2)
segments(mp.d, all.means.d-SE.d, mp.d, all.means.d+SE.d, lwd=2)
segments(mp.d-0.1, all.means.d-SE.d, mp.d+0.1, all.means.d-SE.d, lwd=2)
segments(mp.d-0.1, all.means.d+SE.d, mp.d+0.1, all.means.d+SE.d, lwd=2)
abline(h=0, lty=2)

all.model.d <- lm(O2.flux[Data$chamber=="Dark"] ~ cockles[Data$chamber=="Dark"])
summary(all.model.d) # p = .00871
##
## Call:
## lm(formula = O2.flux[Data$chamber == "Dark"] ~ cockles[Data$chamber ==
## "Dark"])
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3470 -0.8657 0.0928 0.9815 3.3643
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.2143 0.4602 -4.812 6.7e-05
## cockles[Data$chamber == "Dark"]TRUE 1.7913 0.6271 2.856 0.00871
##
## (Intercept) ***
## cockles[Data$chamber == "Dark"]TRUE **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.594 on 24 degrees of freedom
## Multiple R-squared: 0.2537, Adjusted R-squared: 0.2226
## F-statistic: 8.159 on 1 and 24 DF, p-value: 0.008706
#LIGHT
all.yc.l <- O2.flux[Data$cockles == "cockles" & Data$chamber == "Light"]
all.nc.l <- O2.flux[Data$cockles != "cockles" & Data$chamber == "Light"]
all.means.l = c(mean(all.nc.l), mean(all.yc.l))
mp.l <- barplot(all.means.l, axes=FALSE, axisnames=FALSE, ylim=c(-3,1.5), xlab="Presence of cockles", ylab="Oxygen flux (mM/L)")
axis(1, labels=c("No (-c)","Yes (+c)"), at=mp)
axis(2, at=seq(-3,1.5,by=0.5))
box()
SE.l <- matrix(c(std.error(all.nc.l), std.error(all.yc.l)), 2)
segments(mp.l, all.means.l-SE.l, mp.l, all.means.l+SE.l, lwd=2)
segments(mp.l-0.1, all.means.l-SE.l, mp.l+0.1, all.means.l-SE.l, lwd=2)
segments(mp.l-0.1, all.means.l+SE.l, mp.l+0.1, all.means.l+SE.l, lwd=2)
abline(h=0, lty=2)

all.model.l <- lm(O2.flux[Data$chamber=="Light"] ~ cockles[Data$chamber=="Light"])
summary(all.model.l)
##
## Call:
## lm(formula = O2.flux[Data$chamber == "Light"] ~ cockles[Data$chamber ==
## "Light"])
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.5361 -0.8453 0.1395 0.7897 1.7271
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.7129 0.3138 2.272 0.0323
## cockles[Data$chamber == "Light"]TRUE -0.8468 0.4276 -1.980 0.0592
##
## (Intercept) *
## cockles[Data$chamber == "Light"]TRUE .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.087 on 24 degrees of freedom
## Multiple R-squared: 0.1405, Adjusted R-squared: 0.1046
## F-statistic: 3.922 on 1 and 24 DF, p-value: 0.05924
# Adding cockles was significant with respect to dO for both light chambers and dark chambers regardless of ulva present
# +c = nutrient flux +/-?
### Cockles, Ulva and chambers
## Interaction effects, 3way anova
# 3-way anova code taken from www.quantide.com/wp-content/uploads/2017/02/Three-way-Anova-with-R.pdf
O2.m1 <- aov(O2.flux~cockles*ulva*chamber, data=Data)
summary(O2.m1)
## Df Sum Sq Mean Sq F value Pr(>F)
## cockles 1 2.88 2.883 1.502 0.226895
## ulva 1 4.50 4.497 2.343 0.132994
## chamber 1 29.51 29.511 15.376 0.000305 ***
## cockles:ulva 1 0.39 0.395 0.206 0.652369
## cockles:chamber 1 22.48 22.485 11.715 0.001351 **
## ulva:chamber 1 0.00 0.000 0.000 0.988393
## cockles:ulva:chamber 1 0.00 0.000 0.000 0.995841
## Residuals 44 84.45 1.919
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
O2.m2 <- update(O2.m1, . ~ . - cockles:ulva:chamber)
Anova(O2.m1, O2.m2, type="III")
## Anova Table (Type III tests)
##
## Response: O2.flux
## Sum Sq Df F value Pr(>F)
## (Intercept) 20.093 1 10.4690 0.0023076 **
## cockles 8.464 1 4.4098 0.0415002 *
## ulva 1.772 1 0.9234 0.3418351
## chamber 25.843 1 13.4644 0.0006534 ***
## cockles:ulva 0.193 1 0.1005 0.7527321
## cockles:chamber 11.277 1 5.8754 0.0195319 *
## ulva:chamber 0.000 1 0.0002 0.9890624
## cockles:ulva:chamber 0.000 1 0.0000 0.9958409
## Residuals 84.450 45
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# p-value: .0415 *, 0.3418, 0.0007 ***, 0.7527, 0.0195 *, 0.9891, 0.9958
plot(O2.m2) # residuals



