This project is a R implementation of the BKTR algorithm presented by Mengying Lei, Aurélie Labbe & Lijun Sun (2023). The article presenting the algorithm can be found here.
BKTR stands for Scalable Spatiotemporally Varying Coefficient Modelling with Bayesian Kernelized Tensor Regression. It allows to model spatiotemporally varying coefficients using a Bayesian framework. We implemented the algorithm and more in a R package that uses torch as a tensor operation backend.
For information, an alternative Python implementation of the algorithm can be found here. The Python implementation is synchronized with this repository and development is done in parallel. The synchronization of features will be done at a subrevision level (x.y.0).
An article presenting the R package in details is currently in preparation and should be available soon.
install.packages('BKTR')
The latest development version on GitHub can be installed using the
devtools
package:
library(devtools)
::install_github('julien-hec/BKTR', ref = 'main') devtools
If you obtain an error message when installing the package, it may be
due to the installation of the torch
package. A common
error message that can appear during BKTR
installation is
installation of package 'BKTR' had non-zero exit status
.
The torch
package is a dependency of the BKTR
package and there is a good chance that the error comes from the
installation of torch
. Because of its ability to perform
tensor operations on the GPU, it can sometimes be more complicated to
install than other R packages. We provide some guidance for the
installation of torch
below.
A simple way to see if BKTR installation problems come from the torch installation is to try to install torch alone first:
install.packages('torch')
If you obtain an error message, we encourage you to continue reading the following subsections.
If you use a non-interactive R session (e.g. in a Docker container), you need to install LibTorch and LibLantern afterwards with the following command:
library(torch)
::torch_install() torch
If you have a CUDA version that causes issues during the torch
installation and you just want to use the CPU version of BKTR, you can
install torch with the CPU
option:
Sys.setenv(CUDA='cpu')
install.packages('torch')
If your CUDA
version does not seem to be supported
correctly and you obtain the following error message:
Error in `check_supported_version()`:
x Unsupported CUDA version "12.2"
i Currently supported versions are: "11.7" and "11.8".
As specified in the prebuilt
section of torch’s installation guide, you can try to install from
specific precompiled binaries for another CUDA
version:
options(timeout = 600) # increasing timeout since we download a 2GB file.
# For Windows and Linux: "cpu", "cu117", "cu118" are the only currently supported
# For MacOS the supported are: "cpu-intel" or "cpu-m1"
<- "cu118"
kind <- available.packages()["torch","Version"]
version options(repos = c(
torch = sprintf("https://torch-cdn.mlverse.org/packages/%s/%s/", kind, version),
CRAN = "https://cloud.r-project.org" # or any other from which you want to install the other R dependencies.
))install.packages("torch")
For more information on how to install torch, please refer to the torch installation vignette.
If you want to get started quickly with BKTR
on Google
Colab, you can use the following examples - BKTR on Light BIXI Data with
CPU (Colab
& GitHub)
- BKTR on Light BIXI Data with GPU (Colab
& GitHub)
To verify that everything is running smoothly you can try to run a
BKTR regression on the BIXI data presented in the package. (The data is
already preloaded in the package via the BixiData
R6 class). To
use a subset of the BIXI dataset as a simple example, we can also use
the is_light
argument of the BixiData$new()
method to only run our example on 25 stations and 50 days of data.
The following code will run a BKTR regression using sensible defaults on the simplified BIXI data and print a summary of the results.
library(BKTR)
<- BixiData$new(is_light=TRUE)
bixi_data <- BKTRRegressor$new(
bktr_regressor data_df=bixi_data$data_df,
spatial_positions_df=bixi_data$spatial_positions_df,
temporal_positions_df=bixi_data$temporal_positions_df,
burn_in_iter=200,
sampling_iter=200
)$mcmc_sampling()
bktr_regressorsummary(bktr_regressor)
Contributions are welcome. Do not hesitate to open an issue or a pull request if you encounter any problem or have any suggestion.