# NOT RUN {
# First, an easy example with raw_data = TRUE
# Loading in data
data("daily")
# Functional covariates (subsetting for time sake)
precip = t(daily$precav)
longtidunal_dat = list(precip)
# Scalar Response
total_prec = apply(daily$precav, 2, mean)
# Running model
fit1 = fnn.fit(resp = total_prec,
func_cov = longtidunal_dat,
scalar_cov = NULL,
learn_rate = 0.0001,
epochs = 10,
raw_data = TRUE)
# Classification Example with raw_data = TRUE
# Loading data
tecator = FuncNN::tecator
# Making classification bins
tecator_resp = as.factor(ifelse(tecator$y$Fat > 25, 1, 0))
# Non functional covariate
tecator_scalar = data.frame(water = tecator$y$Water)
# Splitting data
ind = sample(1:length(tecator_resp), round(0.75*length(tecator_resp)))
train_y = tecator_resp[ind]
test_y = tecator_resp[-ind]
train_x = tecator$absorp.fdata$data[ind,]
test_x = tecator$absorp.fdata$data[-ind,]
scalar_train = data.frame(tecator_scalar[ind,1])
scalar_test = data.frame(tecator_scalar[-ind,1])
# Making list element to pass in
func_covs_train = list(train_x)
func_covs_test = list(test_x)
# Now running model
fit_class = fnn.fit(resp = train_y,
func_cov = func_covs_train,
scalar_cov = scalar_train,
hidden_layers = 6,
neurons_per_layer = c(24, 24, 24, 24, 24, 58),
activations_in_layers = c("relu", "relu", "relu", "relu", "relu", "linear"),
domain_range = list(c(850, 1050)),
learn_rate = 0.001,
epochs = 100,
raw_data = TRUE,
early_stopping = TRUE)
# Running prediction, gets probabilities
predict_class = fnn.predict(fit_class,
func_cov = func_covs_test,
scalar_cov = scalar_test,
domain_range = list(c(850, 1050)),
raw_data = TRUE)
# Example with Pre-Processing (raw_data = FALSE)
# loading data
tecator = FuncNN::tecator
# libraries
library(fda)
# define the time points on which the functional predictor is observed.
timepts = tecator$absorp.fdata$argvals
# define the fourier basis
nbasis = 29
spline_basis = create.fourier.basis(tecator$absorp.fdata$rangeval, nbasis)
# convert the functional predictor into a fda object and getting deriv
tecator_fd = Data2fd(timepts, t(tecator$absorp.fdata$data), spline_basis)
tecator_deriv = deriv.fd(tecator_fd)
tecator_deriv2 = deriv.fd(tecator_deriv)
# Non functional covariate
tecator_scalar = data.frame(water = tecator$y$Water)
# Response
tecator_resp = tecator$y$Fat
# Getting data into right format
tecator_data = array(dim = c(nbasis, length(tecator_resp), 3))
tecator_data[,,1] = tecator_fd$coefs
tecator_data[,,2] = tecator_deriv$coefs
tecator_data[,,3] = tecator_deriv2$coefs
# Splitting into test and train for third FNN
ind = 1:165
tec_data_train <- array(dim = c(nbasis, length(ind), 3))
tec_data_test <- array(dim = c(nbasis, nrow(tecator$absorp.fdata$data) - length(ind), 3))
tec_data_train = tecator_data[, ind, ]
tec_data_test = tecator_data[, -ind, ]
tecResp_train = tecator_resp[ind]
tecResp_test = tecator_resp[-ind]
scalar_train = data.frame(tecator_scalar[ind,1])
scalar_test = data.frame(tecator_scalar[-ind,1])
# Setting up network
tecator_fnn = fnn.fit(resp = tecResp_train,
func_cov = tec_data_train,
scalar_cov = scalar_train,
basis_choice = c("fourier", "fourier", "fourier"),
num_basis = c(5, 5, 7),
hidden_layers = 4,
neurons_per_layer = c(64, 64, 64, 64),
activations_in_layers = c("relu", "relu", "relu", "linear"),
domain_range = list(c(850, 1050), c(850, 1050), c(850, 1050)),
epochs = 300,
learn_rate = 0.002)
# Prediction example can be seen with ?fnn.fit()
# Functional Response Example:
# libraries
library(fda)
# Loading data
data("daily")
# Creating functional data
temp_data = array(dim = c(65, 35, 1))
tempbasis65 = create.fourier.basis(c(0,365), 65)
tempbasis7 = create.bspline.basis(c(0,365), 7, norder = 4)
timepts = seq(1, 365, 1)
temp_fd = Data2fd(timepts, daily$tempav, tempbasis65)
prec_fd = Data2fd(timepts, daily$precav, tempbasis7)
prec_fd$coefs = scale(prec_fd$coefs)
# Data set up
temp_data[,,1] = temp_fd$coefs
resp_mat = prec_fd$coefs
# Non functional covariate
weather_scalar = data.frame(total_prec = apply(daily$precav, 2, sum))
# Getting data into proper format
ind = 1:30
nbasis = 65
weather_data_train <- array(dim = c(nbasis, ncol(temp_data), 1))
weather_data_train[,,1] = temp_data
scalar_train = data.frame(weather_scalar[,1])
resp_train = t(resp_mat)
# Running model
weather_func_fnn <- fnn.fit(resp = resp_train,
func_cov = weather_data_train,
scalar_cov = scalar_train,
basis_choice = c("bspline"),
num_basis = c(7),
hidden_layers = 2,
neurons_per_layer = c(1024, 1024),
activations_in_layers = c("sigmoid", "linear"),
domain_range = list(c(1, 365)),
epochs = 300,
learn_rate = 0.01,
func_resp_method = 1)
# }
# NOT RUN {
# }
Run the code above in your browser using DataLab