Sunteți pe pagina 1din 8

02/09/2019 R for Spatial Scientists

R pour les statistiques spatiales

Vue
Variogrammes R et Krigeage
d'ensemble

Contenu R fournit des fonctions pour créer des variogrammes et créer des surfaces
(rasters) à l'aide de Kriging.
Référence
Ces exemples utilisent les ensembles de données suivants:
Ressources
Aléatoire: valeurs aléatoires
Gradient: les valeurs forment un gradient d'ouest en est (de gauche à droite)
Sinus: les valeurs sont basées sur une onde sinusoïdale le long d'une diagonale
du sud-ouest au nord-est (en bas à gauche en haut à droite)

Ceux-ci ont été créés dans Excel par les étapes suivantes:

1. Créez une colonne "x" et "y" et indiquez-leur des valeurs comprises entre 1 et
1000. Celles-ci simuleront les coordonnées
2. Créer une colonne "m_grad" pour simuler un dégradé et lui donner la même
valeur que la colonne "x"
3. Créer une colonne "m_rand" et en faire une variable aléatoire
4. Créer une colonne "m_grad_rand" et la rendre égale aux valeurs de colonne
aléatoires plus les valeurs de colonne en dégradé
5. Créez une colonne "m_sine" et définissez-la sur le sinus de la colonne x fois la
colonne y après la mise à l'échelle des colonnes pour passer de 0 à 2 PI ou:
1. m_sine = sinus ((x / 1000 * 2 * PI) * (y / 1000) * 2 * PI))
2. Code Excel: = NAS (A2 / 1000 * 2 * PI () + B2 / 1000 * 2 * PI ())

6. Exporter le fichier en tant que "CSV"

N'oubliez pas de charger les bibliothèques "gstat" et "sp" avant de continuer.

bibliothèque install.packages ("gstat") (gstat ) bibliothèque


install.packages ("sp")
(sp)

Données aléatoires

Lisez les données dans RStudio et tracez "x" contre "y".

TheData = read.csv ("C: /ProjectsR/GSp470/autocor_data.csv")


graphique (TheData $ x, TheData $ y)

Le problème, c’est que nous voulons voir les valeurs et leur emplacement. Pour
cela, nous allons commencer par utiliser la bibliothèque "sp" pour convertir
d’abord les colonnes "x" et "y" en coordonnées, puis créer un graphique à bulles
pour tracer les valeurs aléatoires.

# charge la bibliothèque de
bibliothèque sp (sp)

# supprime les lignes de données nulles


TheData = na.omit (TheData)

# convertit un cadre de données simple en


coordonnées d' objet de cadre de données spatiales (TheData) = ~ x + y

# crée un tracé en bulle avec le


bulle de valeurs aléatoires (TheData, zcol = 'm_rand', fill = VRAI, do.sqrt = FALSE, maxsize = 3)

gsp.humboldt.edu/OLM/R/04_01_Variograms.html 1/8
02/09/2019 R for Spatial Scientists

Ensuite, nous allons créer un variogramme simple. Cela "rassemble" les données
ensemble en divisant les distances entre chacun des points sur la base d'une taille
de "décalage" entre les distances. Exécutez le code suivant et affichez le résultat.

TheVariogram = variogramme (m_rand ~ 1, data = TheData)


tracé (TheVariogram)

Entrez le nom du variogramme dans R et vous verrez un tableau avec les valeurs
suivantes:

np - nombre de points dans le décalage (bin)


dist - distance moyenne entre les points dans le décalage
gamma - moyenne pour le décalage

Ensuite, nous voulons adapter un modèle de variogramme aux données


regroupées et l'ajouter à notre graphique. Pour cela, vous devez sélectionner les
valeurs de seuil ("psill"), de nugget et de plage de manière appropriée, sinon la
courbe peut ne pas apparaître sur le graphique.

Le "modèle" peut être l'un des suivants:

"Exp" (pour exponentielle)


"Sph" (pour sphérique)
"Gau" (pour gaussien)
"Mat" (pour la mère)

TheVariogramModel <- vgm (psill = 0,15, modèle = "Gau", nugget = 0,0001, plage = 5)

Si vous imprimez la variable "TheVariogramModel", vous verrez les nouvelles


valeurs du nugget et du sill.

plot (TheVariogram, model = TheVariogramModel)

gsp.humboldt.edu/OLM/R/04_01_Variograms.html 2/8
02/09/2019 R for Spatial Scientists

Notez que pour les données aléatoires, l'auto-corrélation est très faible, la plage
est donc très petite et nous atteignons rapidement le seuil.

Pente

Pour cet exemple, utilisez les données de dégradé et voyez en quoi les tracés sont
différents.

Dans l'exemple ci-dessus, nous devions déterminer nous-mêmes les valeurs du


variogramme (nugget, range et sill). Nous pouvons également "adapter" un
modèle existant à un variogramme à partir de nos données.

FittedModel <- fit.variogram (TheVariogram, model = TheVariogramModel)

- Tracé (TheVariogram, model = FittedModel)

gsp.humboldt.edu/OLM/R/04_01_Variograms.html 3/8
02/09/2019 R for Spatial Scientists

Notez que pour les données de gradient, nous avons une très longue portée et
nous n’atteignons jamais un seuil.

Vous pouvez examiner les valeurs ajustées du variogramme avec la fonction


"summary ()". Le seuil est la valeur "moyenne" des valeurs "psill", tandis que le
nugget est le "minimum" du "psill". La plage est dans la valeur "moyenne" pour la
"plage".

modèle psill gamme kappa ang1 ang2


Nug: 1 Min. : 81,6 Min. : 0.0 Min. : 0.000 Min. : 0 Min. : 0
Gau: 1 1er Qu.:146756.2 premier Qu .: 374,8 premier Qu.:0.125 premier Qu.:0 premier Qu.:0
Exp: 0 Médiane: 293430,9 médiane: 749,7 Médiane: 0,250 Médiane: 0 Médiane: 0
Sph: 0 Moyenne: 293430,9 Moyenne: 749,7 Moyenne: 0,250 Moyenne: 0 Moyenne: 0
Exc: 0 3ème Qu.:440105.5 3ème Qu.:1124.5 3ème Qu.:.375 3ème Qu.:03 Qu.:0
Mat: 0 Max. : 586780.2 Max. : 1499.3 Max. : 0,500 Max. : 0 Max. : 0
(Autre): 0
ang3 anis1 anis2
Min. :0 Min. :1 Min. :1
1st Qu.:0 1st Qu.:1 1st Qu.:1
Median :0 Median :1 Median :1
Mean :0 Mean :1 Mean :1
3rd Qu.:0 3rd Qu.:1 3rd Qu.:1
Max. :0 Max. :1 Max. :1

Note: The values for the psill and range look appropriate to me (use the means).
I'm not sure where the nugget is (it should be about 0) and there is minimal
documentation on the output for R functions - a great extra credit opportunity!

Sine Function

Now try the "sine" data.

gsp.humboldt.edu/OLM/R/04_01_Variograms.html 4/8
02/09/2019 R for Spatial Scientists

This shows that there is autocorrelation in the "sine" data but the graph also
shows a strong trend in the autocorrelation from the north-west to the south-east.
This is referred to as "anisotropic" (not the same in all directions).

Anisotropy

We can check for anisotropy with a directional "map"

# Create a "gstat" object


TheGStat <- gstat(id="Sine", formula=m_sin ~ 1, data=TheData)

TheVariogram=variogram(TheGStat, map=TRUE, cutoff=4000, width=200)

## the original data had a large north-south trend, check with a variogram map
plot(TheVariogram, threshold=10)

This plot shows there is a stronger autocorrelation between the values along the
north-east to south-west axis than in the other directions.

Lets fit a variogram model to this data to examine the results.

# Create directional variograms at 0, 45, 90, 135 degrees from north (y-axis)
TheVariogram <- variogram(TheGStat, alpha=c(0,45,90,135))

# Create a new model


TheModel=vgm(model='Lin' , anis=c(0, 0.5))

# Fit a model to the variogram


FittedModel <- fit.variogram(TheVariogram, model=TheModel)

gsp.humboldt.edu/OLM/R/04_01_Variograms.html 5/8
02/09/2019 R for Spatial Scientists
## plot results:
plot(TheVariogram, model=FittedModel, as.table=TRUE)

Notice that there is autocorrelation in all the directions except 135 degrees or
where you can follow a line where all the values are the same.

Creating Kriged Surfaces

Continuing from the previous section, we'll want to update out "gstat" object.

# update the gstat object:


TheGStat <- gstat(TheGStat, id="Sine", model=FittedModel )

Use the code below and modify it as needed to create a "grid" (raster) to hold the
Kriged surface.

# create sequences that represent the center of the columns of pixels


# change "by" to change the resolution of the raster
Columns=seq(from=1, to=1000, by=100)

# And the rows of pixels:


Rows=seq(from=1, to=1000, by=100)

# Create a grid of "Pixels" using x as columns and y as rows


TheGrid <- expand.grid(x=Columns,y=Rows )

# Convert Thegrid to a SpatialPixel class


coordinates(TheGrid) <- ~ x+y
gridded(TheGrid) <- TRUE

# Plot the grid and points


plot(TheGrid, cex=0.5)
points(TheData, pch=1, col='red', cex=0.7)
title("Interpolation Grid and Sample Points")

gsp.humboldt.edu/OLM/R/04_01_Variograms.html 6/8
02/09/2019 R for Spatial Scientists

Finally, we can perform Kriging on the data and plot the results.

# perform ordinary kriging prediction:


TheSurface <- predict(TheGStat, model=FittedModel, newdata=TheGrid)

# Set the margins to 2


par(mar=c(2,2,2,2))

# Add the Kriged surface


image(TheSurface, col=terrain.colors(20))

# Add contours to the surface


contour(TheSurface, add=TRUE, drawlabels=FALSE, col='brown')

# Add the points


points(TheData, pch=4, cex=0.5)

# Set the title


title('Prediction')

Using R, we can also plot the variance in the surface.

ThePoints = list("sp.points", TheData, pch = 4, col = "black", cex=0.5)


spplot(TheSurface, zcol="Sine.pred", col.regions=terrain.colors(20), cuts=19, sp.layout=list(ThePoints), contour=TRU

## plot the kriging variance as well


spplot(TheSurface, zcol='Sine.var', col.regions=heat.colors(100), cuts=99, main='OK Variance',sp.layout=list(ThePoin

gsp.humboldt.edu/OLM/R/04_01_Variograms.html 7/8
02/09/2019 R for Spatial Scientists

Modifying Variograms

You can modify the location of the lags with the "boundaries" parameter:

boundaries=c(0,1,2,3,4,5,6,7,8,9)

Acknowledgements

This section was partially based on information from University of Florida Statistics
Department

Other Resources

gstat Package

California Soil Lab Kriging Example

Tutorials on variograms in geoR: Empirical Variograms (just the binned data),


Theoretical Models (Fitted Curves)

Tutorials on Kriging in inside-R

Colorado State University, Oregon State University, and Humboldt State University.

gsp.humboldt.edu/OLM/R/04_01_Variograms.html 8/8

S-ar putea să vă placă și