I have been trying to figure out why the standardization outputs using these methods do not seem to be equal, even though numerically they are the same?
library(vegan)
# subset data
env.data <- mite.env[1:10, c("SubsDens", "WatrCont")]
# method 1
env.data.x <- env.data
env.data.x$SubsDens <- as.vector(scale(env.data.x$SubsDens))
env.data.x$WatrCont <- as.vector(scale(env.data.x$WatrCont))
# method 2
env.data.y <- env.data
env.data.y <- as.data.frame(decostand(as.matrix(env.data.y), method = "standardize"))
# method 3
env.data.z <- env.data
normalize <- function(x){
return((x - mean(x))/sd(x))
}
env.data.z$SubsDens <- normalize(env.data.z$SubsDens)
env.data.z$WatrCont <- normalize(env.data.z$WatrCont)
# comparison
env.data.x == env.data.y
env.data.x == env.data.z
env.data.y == env.data.z
Here is the output:
> env.data.x == env.data.y
SubsDens WatrCont
1 TRUE TRUE
2 TRUE TRUE
3 TRUE TRUE
4 TRUE TRUE
5 TRUE TRUE
6 TRUE TRUE
7 TRUE TRUE
8 TRUE TRUE
9 TRUE TRUE
10 TRUE TRUE
> env.data.x == env.data.z
SubsDens WatrCont
1 FALSE TRUE
2 FALSE TRUE
3 FALSE TRUE
4 FALSE TRUE
5 FALSE TRUE
6 FALSE TRUE
7 FALSE TRUE
8 FALSE TRUE
9 FALSE TRUE
10 FALSE TRUE
> env.data.y == env.data.z
SubsDens WatrCont
1 FALSE TRUE
2 FALSE TRUE
3 FALSE TRUE
4 FALSE TRUE
5 FALSE TRUE
6 FALSE TRUE
7 FALSE TRUE
8 FALSE TRUE
9 FALSE TRUE
10 FALSE TRUE
Method 3, standardizing using the formula as a function, seems to be doing something different...
Thank you in advance for your answers!