knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)

randomfields

.github/workflows/R-CMD-check.yaml Codecov test coverage test-coverage

Shiny App associée : https://juliette-chiapello.shinyapps.io/RandomFields/

-- English version below --

Le principe est de générer des champs aléatoires en 2D, puis de calculer leurs corrélations.
Un champ en 2D est un ensemble de valeurs sur une grille (x ,y). Ces valeurs sont, dans notre cas, des réalisations de variables aléatoires.
Le but de ce package est de donner des outils pour calculer la corrélation entre deux variables aléatoires : une située en un point (x1, y1) et une autre située en un point (x2, y2).
On peut montrer qu'en appliquant des moyennes glissantes à des champs générés par des variables aléatoires indépendantes, on obtient des champs structurés et des variables aléatoires dépendantes.

-- English version --

This package considers randomly generated matrix as maps. It plots the maps and indicates the variance and the distribution of a realization. It does moving average to generate new maps which are spatially structured. It calculates the covariance between points on spatial structured maps. And it subsamples maps, with or without an average of the neighbored points.

More precisely :

The principle is to generate random fields in 2D and then calculate their correlations.
A 2D field is a set of values on a grid (x, y). In our case, these values are realizations of random variables.
The purpose of this package is to provide tools for calculating the correlation between two random variables: one located at a point (x1, y1) and another located at a point (x2, y2).
It can be shown that by applying moving averages to fields generated by independent random variables, structured fields and dependent random variables are obtained.

Getting started

You can install the package randomfields from github :

remotes::install_github("https://github.com/C-Juliette/randomfields")

Génération d'un champ aléatoire qui suit une loi normale

On souhaite générer un champ aléatoire de taille 100x100. Chacun des 10000 points correspond à une réalisation d'une variables aléatoire. Toutes les variables aléatoires sont indépendantes et identiquement distribuées (iid) suivant une loi normale centrée réduite.

library(randomfields)
my_random_field <- gen_norm(100)

On peut visualiser ce champ (cette loi normale en 2D) :

plot_matrix(my_random_field)

Corrélation entre les points

Les variables sont-elles corrélées ?

Le vecteur indique la direction dans laquelle on se place pour étudier la corrélation. C'est un vecteur directeur (ici il s'agit de la corrélation des points selon la direction (0, 1)).

actual_correlation(my_random_field, c(0,1)) |> 
  head(10)

La corrélation est nulle (aux fluctuations statistiques près). La corrélation ne vaut 1 que lorsqu'on qu'on considère la corrélation de la variable avec elle-même (distance nulle).

Application d'un moyenne glissante

On applique une fenêtre glissante carrée de côté r = 6 sur le champ aléatoire.

structured_field <- moving_average(my_random_field, r=6)

On peut visualiser ce champ :

plot_matrix(structured_field)

Des structures sont apparues. La variance a diminué (les valeurs sont plus proches les unes des autres, la moyenne glissante "gomme" les écarts).

Cela se retranscrit au niveau des corrélations :

actual_correlation(structured_field, c(0, 1)) |> 
  head(10)

Les variables aléatoires sont corrélées et leur corrélations diminue avec la distance qui les sépare.

Visualisation des graphiques de corrélation

plot_actual_cov(my_random_field, c(6), list(c(0, 1)), max = 20)
plot_actual_cov(my_random_field, c(6), list(c(0, 1)), max = 20)


C-Juliette/randomfields documentation built on Sept. 3, 2023, 5:56 a.m.