DNN {sjSDM} | R Documentation |
Non-linear model (deep neural network) of environmental responses
Description
specify the model to be fitted
Usage
DNN(
data = NULL,
formula = NULL,
hidden = c(10L, 10L, 10L),
activation = "selu",
bias = TRUE,
lambda = 0,
alpha = 0.5,
dropout = 0
)
Arguments
data |
matrix of environmental predictors |
formula |
formula object for predictors |
hidden units in layers, length of hidden corresponds to number of layers | |
activation |
activation functions, can be of length one, or a vector of activation functions for each layer. Currently supported: tanh, relu, leakyrelu, selu, or sigmoid |
bias |
whether use biases in the layers, can be of length one, or a vector (number of hidden layers including (last layer) but not first layer (intercept in first layer is specified by formula)) of logicals for each layer. |
lambda |
lambda penalty, strength of regularization: |
alpha |
weighting between lasso and ridge: |
dropout |
probability of dropout rate |
Value
An S3 class of type 'DNN' including the following components:
formula |
Model matrix formula |
X |
Model matrix of covariates |
data |
Raw data |
l1_coef |
L1 regularization strength, can be -99 if |
l2_coef |
L2 regularization strength, can be -99 if |
hidden |
Integer vector of hidden neurons in the deep neural network. Length of vector corresponds to the number of hidden layers. |
activation |
Character vector of activation functions. |
bias |
Logical vector whether to use bias or not in each hidden layer. |
Implemented S3 methods include print.DNN
See Also
Examples
## Not run:
# Basic workflow:
## simulate community:
com = simulate_SDM(env = 3L, species = 7L, sites = 100L)
## fit model:
model = sjSDM(Y = com$response,env = com$env_weights, iter = 50L)
# increase iter for your own data
coef(model)
summary(model)
getCov(model)
## plot results
species=c("sp1","sp2","sp3","sp4","sp5","sp6","sp7")
group=c("mammal","bird","fish","fish","mammal","amphibian","amphibian")
group = data.frame(species=species,group=group)
plot(model,group=group)
## calculate post-hoc p-values:
p = getSe(model)
summary(p)
## or turn on the option in the sjSDM function:
model = sjSDM(Y = com$response, env = com$env_weights, se = TRUE,
family = binomial("probit"),
iter = 2L)
summary(model)
## fit model with interactions:
model = sjSDM(Y = com$response,
env = linear(data = com$env_weights, formula = ~X1:X2 + X3),
se = TRUE,
iter = 2L) # increase iter for your own data
summary(model)
## without intercept:
model = update(model, env_formula = ~0+X1:X2 + X3)
summary(model)
## predict with model:
preds = predict(model, newdata = com$env_weights)
## calculate R-squared:
R2 = Rsquared(model)
print(R2)
# With spatial terms:
## linear spatial model
XY = matrix(rnorm(200), 100, 2)
model = sjSDM(Y = com$response, env = linear(com$env_weights),
spatial = linear(XY, ~0+X1:X2),
iter = 50L) # increase iter for your own data
summary(model)
predict(model, newdata = com$env_weights, SP = XY)
R2 = Rsquared(model)
print(R2)
## Using spatial eigenvectors as predictors to account
## for spatial autocorrelation is a common approach:
SPV = generateSpatialEV(XY)
model = sjSDM(Y = com$response, env = linear(com$env_weights),
spatial = linear(SPV, ~0+., lambda = 0.1),
iter = 50L) # increase iter for your own data
summary(model)
predict(model, newdata = com$env_weights, SP = SPV)
## Visualize internal meta-community structure
an = anova(model)
plot(an, internal=TRUE)
## non-linear(deep neural network) model
model = sjSDM(Y = com$response, env = linear(com$env_weights),
spatial = DNN(SPV,hidden = c(5L, 5L), ~0+.),
iter = 2L) # increase iter for your own data
summary(model)
predict(model, newdata = com$env_weights, SP = SPV)
# Regularization
## lambda is the regularization strength
## alpha weights the lasso or ridge penalty:
## - alpha = 0 --> pure lasso
## - alpha = 1.0 --> pure ridge
model = sjSDM(Y = com$response,
# mix of lasso and ridge
env = linear(com$env_weights, lambda = 0.01, alpha = 0.5),
# we can do the same for the species-species associations
biotic = bioticStruct(lambda = 0.01, alpha = 0.5),
iter = 2L) # increase iter for your own data
summary(model)
coef(model)
getCov(model)
# Anova
com = simulate_SDM(env = 3L, species = 15L, sites = 200L, correlation = TRUE)
XY = matrix(rnorm(400), 200, 2)
SPV = generateSpatialEV(XY)
model = sjSDM(Y = com$response, env = linear(com$env_weights),
spatial = linear(SPV, ~0+.),
iter = 50L) # increase iter for your own data
result = anova(model)
print(result)
plot(result)
## visualize meta-community structure
plot(result, internal=TRUE)
# Deep neural network
## we can fit also a deep neural network instead of a linear model:
model = sjSDM(Y = com$response,
env = DNN(com$env_weights, hidden = c(10L, 10L, 10L)),
iter = 2L) # increase iter for your own data
summary(model)
getCov(model)
pred = predict(model, newdata = com$env_weights)
## extract weights
weights = getWeights(model)
## we can also assign weights:
setWeights(model, weights)
## with regularization:
model = sjSDM(Y = com$response,
# mix of lasso and ridge
env = DNN(com$env_weights, lambda = 0.01, alpha = 0.5),
# we can do the same for the species-species associations
biotic = bioticStruct(lambda = 0.01, alpha = 0.5),
iter = 2L) # increase iter for your own data
getCov(model)
getWeights(model)
## End(Not run)