setwd("E:/")
data <- read.csv("Aerial_biomassBIO.csv")
r1 = lm(BIO~SAL+pH+K+Na+Zn,data=data)
par(mfrow=c(2,2))
plot(r1)

shapiro.test(r1$resid)
## 
##  Shapiro-Wilk normality test
## 
## data:  r1$resid
## W = 0.92418, p-value = 0.005874
library(MASS)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
## 
##     select
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(magrittr)
b=boxcox(r1)

b %<>% as.data.frame() %>% arrange(y) 
r2=lm(BIO^b[100,1]~SAL+pH+K+Na+Zn,data=data);hist(r2$residuals)

let’s compare

par(mfrow=c(2,1))
hist(r1$resid);hist(r2$resid)

par(mfrow=c(2,4))
plot(r1);plot(r2)

shapiro.test(r2$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  r2$residuals
## W = 0.94959, p-value = 0.049