EcoGenetics (version 1.2.1-5)

eco.weight: Spatial weights

Description

Spatial weights for individuals (nodes) with coordinates XY

Usage

eco.weight(XY, method = c("circle", "knearest", "inverse", "circle.inverse",
  "exponential", "circle.exponential"), W = NULL, d1 = 0, d2 = NULL,
  k = NULL, p = 1, alpha = 1, dist.method = "euclidean",
  row.sd = FALSE, max.sd = FALSE, self = FALSE, latlon = FALSE,
  ties = c("unique", "min", "random", "ring", "first"))

Arguments

XY

Matrix/data frame with projected coordinates.

method

Method of spatial weight matrix: "circle", "knearest", "inverse", "circle.inverse", "exponential", "circle.exponential".

W

Custom weight matrix, with rownames and colnames identical to the XY data frame with coordinates

d1

Minimum distance for circle matrices.

d2

Maximum distance for circle matrices.

k

Number of neighbors for nearest neighbor distance. When equidistant neighbors are present, the program select them randomly.

p

Power for inverse distance. Default = 1.

alpha

Alpha value for exponential distance. Default = 1.

dist.method

Method used for computing distances passed to dist. Default = euclidean.

row.sd

Logical. Should be row standardized the matrix? Default FALSE (binary weights).

max.sd

Logical. Should be divided each weight by the maximum of the matrix? Default FALSE (binary weights).

self

Should be the individuals self-included in circle or knearest weights? Defalut FALSE.

latlon

Are the coordinates in decimal degrees format? Defalut FALSE. If TRUE, the coordinates must be in a matrix/data frame with the longitude in the first column and latitude in the second. The position is projected onto a plane in meters with the function geoXY.

ties

ties handling method for "knearest" method: "unique" (default) for counting the ties as an unique neighbor (i.e), "min" for counting all the ties in a given category but each is counted as a neighbor, "random" for choosing at random a neighbor, "ring" for ring of neighbors, "first" for sequential k values for each neighbor.

Value

An object of class eco.weight with the following slots:

> W weights matrix

> XY input coordinates

> METHOD weights construction method

> PAR parameters used for the construction of weights

> PAR.VAL values of the parameters used for the construction of weights

> ROW.SD row standardization (logical)

> SELF data self-included (logical)

> NONZERO percentage of non-zero connections

> NONZEROIND percentage of individuals with non-zero connections

> AVERAGE average number of connection per individual

ACCESS TO THE SLOTS The content of the slots can be accessed with the corresponding accessors, using the generic notation of EcoGenetics (<ecoslot.> + <name of the slot> + <name of the object>). See help("EcoGenetics accessors") and the Examples section below

Details

This program computes a weights matrix (square matrix with individuals in rows and columns, and weights wij in cells (i and j, individuals)) under the following available methodologies:

- circle: all the connection between individuals i and j, included in a distance radius, higher than d1 and lower than d2, with center in the individual i, have a value of 1 for binary weights. This distance requires the parameters d1 and d2 (default d1 = 0).

- knearest: the connections between an individual and its nearest neighbors of each individual i have a value of 1 for binary weights. This distance requires the parameter k.

- inverse: inverse distance with exponent p (distance = 1/dij^p, with dij the distance between individuals i and j). This distance requires the parameter p (default p = 1).

- circle inverse: combination of "circle" and "inverse". It is the matrix obtained by multiplying each element in a "circle" binary matrix, and an "inverse" matrix. This distance requires the parameters p, d1 and d2 (default p = 1, d1 = 0).

- exponential: inverse exponential distance with parameter alpha (distance = 1/e^(alpha *dij), with dij the distance between individuals i and j). This distance requires the parameter alpha (default alpha = 1).

- circle exponential: combination of "circle" and "exponential". It is the matrix obtained by multiplying each element in a "circle" binary matrix, and an "exponential" matrix. This distance requires the parameters alpha, d1 and d2 (default alpha = 1, d1 = 0).

In addition to these methods, a spatial weight object can be created assigning a custom W matrix ("W" argument). In this case, the "method" is argument automatically set by the program to "custom" (see te example).

----------------------------------

In row standardization, each weight wij for the individual i, is divided by the sum of the row weights (i.e., wij / sum(wij), where sum(wij) is computed over an individual i and all individuals j).

When self is TRUE, the connection j = i is also included.

----------------------------------

PLOTS FOR ECO.WEIGHT OBJECTS:

A plot method is availble (function "eco.plotWeight") showing static or interactive plots, In the case of using the function eco.plotWeight for the argument type="simple", the connections are shown in two plots: an X-Y graph, with the individuals as points, representing the original coordinates, and in a plot with coordinates transformed as ranks (i.e., each coordinate takes an ordered value from 1 to the number of individuals). The other static method (type="igraph") uses the igraph package to generate a visual attractive graph (force network). Two interactive methods are available: type = "network", to plot an interactive force network, and type = "edgebundle" to plot a circular network. For the cases type = "inverse" or type = "exponential", the program generates a plot of weights values vs distance See the examples below.

Examples

Run this code
# NOT RUN {
# }
# NOT RUN {
data(eco3)

# 1)  "circle" method

con <- eco.weight(eco3[["XY"]], method = "circle", d1 = 0, d2 = 500)


#---- Different plot styles for the graph ----#

# simple
eco.plotWeight(con, type = "simple") 
            
# igraph
eco.plotWeight(con, type = "igraph", group = eco3[["S"]]$structure)

# network (interactive)
## click in a node to see the label
eco.plotWeight(con, type = "network", bounded = TRUE, group = eco3[["S"]]$structure)

# edgebundle (interactive)
## in the following plot, the assignment a group factor, 
## generates clustered nodes.
## hover over the nodes to see the individual connections
eco.plotWeight(con, type = "edgebundle", fontSize=8, group = eco3[["S"]]$structure)


# 2) "knearest" method

con <- eco.weight(eco3[["XY"]], method = "knearest", k = 10)
eco.plotWeight(con) 
eco.plotWeight(con, type = "network", bounded = TRUE, group = eco3[["S"]]$structure)

# 3)  "inverse" method
## scale dependent. In the example, the original coordinates (in km) are converted into m
con <- eco.weight(eco3[["XY"]]/1000, method = "inverse", max.sd = TRUE, p = 0.1)
con
eco.plotWeight(con)

# 4) "circle.inverse" method
con <- eco.weight(eco3[["XY"]], method = "circle.inverse", d2 = 1000)
con
eco.plotWeight(con)

# 5) "exponential" method
## scale dependent. In the example, the original coordinates (in km) are converted into m
con <- eco.weight(eco3[["XY"]]/1000, method = "exponential", max.sd = TRUE, alpha = 0.1)
eco.plotWeight(con)

# 6) "circle.exponential" method
con <- eco.weight(eco3[["XY"]], method = "circle.exponential", d2 = 2000)
con
eco.plotWeight(con)


# 7) CUSTOM WEIGHT MATRIX

## An eco.weight object can be created with a custom W matrix. In this case,
## the rows and the columns of W (weight matrix) must have names, 
## that must coincide (also in order) with the name of the XY (position) matrix.

require(igraph)
## this example generates a network with the package igraph
tr <- make_tree(40, children = 3, mode = "undirected")
plot(tr, vertex.size = 10, vertex.label = NA) 

## conversion from igraph to weight matrix 
weights <- as.matrix(as_adj(tr))

## weight matrix requires named rows and columns
myNames <- 1:nrow(weights)
rownames(weights) <- colnames(weights) <-  myNames

## extract coordinates from the igraph object 
coord <- layout.auto(tr)
rownames(coord) <- myNames
plot(layout.auto(tr))

## custom weight object
customw <- eco.weight(XY = coord, W = weights)

## simple plot of the object
eco.plotWeight(customw, type = "simple")

## create a vector with groups to have coloured plots
myColors <- c(rep(1,13), rep(2, 9), rep(3, 9), rep(4, 9))

eco.plotWeight(customw, type = "igraph",group = myColors)

## in the following plot, the argument bounded is set to FALSE, 
## but if you have many groups, it probably should be set to TRUE.
# click in a node to see the label
eco.plotWeight(customw,type = "network", bounded = FALSE, group = myColors)

## in the following plot, the assignment a group factor, 
# generates clustered nodes.
# hover over the name of the nodes to see the individual connections
eco.plotWeight(customw,  type = "edgebundle", group = myColors)


#### CONVERSION FROM LISTW OBJECTS #####
require(adegenet)
# Delaunay triangulation
temp <-chooseCN(eco3[["XY"]], type = 1, result.type = "listw", plot.nb = FALSE)
con <- eco.listw2ew(temp)
eco.plotWeight(con, "network", bounded = TRUE, group = eco3[["S"]]$structure)


#-----------------------
# ACCESSORS USE EXAMPLE
#-----------------------

# the slots are accessed with the generic format 
# (ecoslot. + name of the slot + name of the object). 
# See help("EcoGenetics accessors")

ecoslot.METHOD(con)        # slot METHOD
ecoslot.PAR(con)           # slot PAR
ecoslot.PAR.VAL(con)       # slot PAR.VAL

# }
# NOT RUN {
# }

Run the code above in your browser using DataCamp Workspace