moranplotmap <- function(sf.obj, name.var, listw.obj, flower = FALSE, locmoran = FALSE, names.arg = c("H.-H.", "L.-H.", "L.-L.", "H.-L."),
criteria = NULL, carte = NULL, identify = NULL, cex.lab = 0.8, pch = 16, col = "lightblue3",
xlab = "", ylab = "", axes = FALSE, lablong = "", lablat = "") {
###################################################
########## COMMON to ALL FUNCTIONS in GeoXp
envir <- globalenv()
# Verification of the Spatial Object sf.obj
class.obj <- class(sf.obj)[1]
if(class.obj != "sf")
stop("sf.obj may be a sf object")
if(!(name.var %in% names(sf.obj)))
stop("name.var is not included in the sf object")
# we propose to refind the same arguments used in first version of GeoXp
if (st_geometry_type(sf.obj, by_geometry = F) %in% c("POINT"))
my_coords <- st_coordinates(st_geometry(sf.obj))
else
my_coords <- st_coordinates(st_point_on_surface(st_geometry(sf.obj)))
long <- my_coords[, 1]
lat <- my_coords[, 2]
listvar <- as.data.frame(st_drop_geometry(sf.obj))
listnomvar <- colnames(listvar)
# for identifying the selected sites
if (!is.null(identify) && identify %in% colnames(sf.obj))
label <- sf.obj[[identify]]
else
label <- ""
nointer <- FALSE
nocart <- FALSE
buble <- FALSE
z <- NULL
legmap <- NULL
legends <- list(FALSE, FALSE, "", "")
graphChoice <- ""
varChoice1 <- ""
varChoice2 <- ""
choix <- ""
method <- ""
listgraph <- c("Histogram", "Barplot", "Scatterplot")
# Is there a Tk window already open ?
if (interactive()) {
if (!exists("GeoXp.open", envir = envir) ||
length(ls(envir = .TkRoot$env, all.names = TRUE)) == 2) {
assign("GeoXp.open", TRUE, envir = envir)
} else {
if (get("GeoXp.open", envir = envir)) {
stop(
"A GeoXp function is already open.
Please, close Tk window before calling a new GeoXp function to avoid conflict between graphics")
} else {
assign("GeoXp.open", TRUE, envir = envir)
}
}
}
# Windows device
if(length(dev.list()) == 0 & options("device") == "RStudioGD")
dev.new()
# for graphic
dev.new(noRStudioGD = FALSE)
num_graph <- dev.list()[length(dev.list())]
# for map
dev.new(noRStudioGD = FALSE)
num_carte <- dev.list()[length(dev.list())]
# number of devices
num_supp <- NA
#####################################################
##### Arguments proper to each function
var <- sf.obj[[name.var]]
obs <- vector(mode = "logical", length = length(long))
# verify the type of the main variable
if(!(is.integer(var) || is.double(var)))
stop("the variable name.var should be a numeric variable")
# We create a spatial weight matrix by using a matrix object
n <- nrow(sf.obj)
W <- matrix(0, n, n)
W.sn <- listw2sn(listw.obj)
W[as.matrix(W.sn[, 1:2])] <- W.sn[, 3]
# Is W normalized ?
is.norm <- all(apply(W, 1, sum) == rep(1, n))
#initialisation
if (xlab == "")
xlab <- name.var
if (ylab == "")
ylab <- paste("spatially lagged", name.var)
obsq <- rep(0, length(long))
buble2 <- FALSE
maptest <- FALSE
classe <- rep(1, length(long))
legends2 <- list(FALSE, FALSE, "", "")
z2 <- NULL
legmap2 <- NULL
num <- NULL
labvar <- c(xlab, ylab)
quad <- FALSE
# Option sur le moran
method <- ifelse(flower, "Neighbourplot1", "")
choix.col <- FALSE
graph <- "Moran"
col2 <- rep(col[1], 4)
col3 <- rep("blue", 4)
pch2 <- rep(pch[1], 4)
wvar <- W %*% var
stdvar <- var / sd(var)
uns <- rep(1, length(var))
result <- nonormmoran(stdvar, uns, W)
MORAN <- result$morani
prob.I <- pnorm(result$istat)
rvar <- qr(var)
beta.I <- qr.coef(rvar, wvar)
# calcul de la variable obsq (pour les quadrants)
obsq[which((var > mean(var)) & (wvar >= mean(wvar)))] <- 1
obsq[which((var <= mean(var)) & (wvar > mean(wvar)))] <- 2
obsq[which((var < mean(var)) & (wvar <= mean(wvar)))] <- 3
obsq[which((var >= mean(var)) & (wvar < mean(wvar)))] <- 4
# i de moran local
x.centre <- (var - mean(var))
wx.centre <- (W %*% x.centre)
ilocal <- (x.centre / var(x.centre)) * (wx.centre)
ilocal <- matrix(spdep::localmoran(var, listw = listw.obj)[, 4], ncol = 1)
####################################################
# selection d'un point
####################################################
pointfunc <- function() {
quit <- FALSE
quad <<- FALSE
if (maptest) {
dev.set(num_carte)
title("ACTIVE DEVICE", cex.main = 0.8, font.main = 3, col.main = "red")
title(sub = "To stop selection, click on the right button of the mouse or use ESC",
cex.sub = 0.8, font.sub = 3, col.sub = "red")
if (nrow(sf.obj) > 100 & st_geometry_type(sf.obj, by_geometry = F) == "POLYGON" & !buble) {
points(long, lat, pch = 16, col = "royalblue")
}
} else {
dev.set(num_graph)
title("ACTIVE DEVICE", cex.main = 0.8, font.main = 3, col.main = "red")
title(sub = "To stop selection, click on the right button of the mouse or use ESC",
cex.sub = 0.8, font.sub = 3, col.sub = "red")
}
while (!quit) {
if (maptest) {
dev.set(num_carte)
loc <- locator(1)
if (is.null(loc)) {
quit <- TRUE
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
next
}
if (nrow(sf.obj) > 100 | st_geometry_type(sf.obj, by_geometry = F) == "POINT")
obs <<- selectmap(var1 = long, var2 = lat, obs = obs,
Xpoly = loc[1], Ypoly = loc[2], method = "point")
else {
my_points <- st_as_sf(data.frame(x = loc$x, y = loc$y), coords = c("x", "y"),
crs = st_crs(sf.obj))
def <- as.vector(st_intersects(my_points, sf.obj, sparse = FALSE))
obs[def] <<- !obs[def]
}
} else {
dev.set(num_graph)
loc <- locator(1)
if (is.null(loc)) {
quit <- TRUE
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = num_graph,
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
next
}
obs <<- selectmap(var1 = var, var2 = wvar, obs = obs,
Xpoly = loc[1], Ypoly = loc[2], method = "point")
}
#graphiques
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = num_graph,
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
if (maptest) {
dev.set(num_carte)
title("ACTIVE DEVICE", cex.main = 0.8, font.main = 3, col.main = "red")
title(sub = "To stop selection, click on the right button of the mouse or use ESC",
cex.sub = 0.8, font.sub = 3, col.sub = "red")
if (nrow(sf.obj) > 100 & st_geometry_type(sf.obj, by_geometry = F) == "POLYGON" & !buble) {
points(long, lat, pch = 16, col = "royalblue")
}
} else {
dev.set(num_graph)
title("ACTIVE DEVICE", cex.main = 0.8, font.main = 3, col.main = "red")
title(sub = "To stop selection, click on the right button of the mouse or use ESC",
cex.sub = 0.8, font.sub = 3, col.sub = "red")
}
if ((graphChoice != "") && (varChoice1 != "") && (length(dev.list()) > 2))
graphique(var1 = listvar[, which(listnomvar == varChoice1)], var2 = listvar[,which(listnomvar == varChoice2)],
obs = obs, num = num_supp, graph = graphChoice, couleurs = col[1], symbol = pch[1], labvar = c(varChoice1, varChoice2))
}
}
####################################################
# selection d'un point sur la carte
####################################################
pt1func <- function() {
method <<- ifelse(flower, "Neighbourplot1", "Quadrant")
graph <<- "Moran"
maptest <<- TRUE
pointfunc()
}
####################################################
# selection d'un point sur le graphique
####################################################
pt2func <- function() {
method <<- ifelse(flower, "Neighbourplot1", "Quadrant")
graph <<- "Moran"
maptest <<- FALSE
pointfunc()
}
####################################################
# selection d'un polygone
####################################################
polyfunc <- function() {
polyX <- NULL
polyY <- NULL
quit <- FALSE
quad <<- FALSE
if (maptest) {
dev.set(num_carte)
title("ACTIVE DEVICE", cex.main = 0.8, font.main = 3, col.main = "red")
title(sub = "To stop selection, click on the right button of the mouse or use ESC",
cex.sub = 0.8, font.sub = 3, col.sub = "red")
} else {
dev.set(num_graph)
title("ACTIVE DEVICE", cex.main = 0.8, font.main = 3, col.main = "red")
title(sub = "To stop selection, click on the right button of the mouse or use ESC",
cex.sub = 0.8, font.sub = 3, col.sub = "red")
}
while (!quit) {
if (maptest) {
dev.set(num_carte)
points(long, lat, pch = 16, col = "royalblue")
loc <- locator(1)
if (is.null(loc)) {
quit<-TRUE
next
}
} else {
dev.set(num_graph)
loc <- locator(1)
if (is.null(loc)) {
quit <- TRUE
next
}
}
polyX <- c(polyX, loc[1])
polyY <- c(polyY, loc[2])
lines(polyX, polyY)
}
polyX <- c(polyX, polyX[1])
polyY <- c(polyY, polyY[1])
if (length(polyX) > 0) {
lines(polyX, polyY)
if (maptest) {
obs <<- selectmap(var1 = long, var2 = lat, obs = obs, Xpoly = polyX,
Ypoly = polyY, method = "poly")
} else {
obs <<- selectmap(var1 = var, var2 = wvar, obs = obs,
Xpoly = polyX, Ypoly = polyY, method = "poly")
}
#graphiques
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = num_graph,
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
if ((graphChoice != "") && (varChoice1 != "") && (length(dev.list()) > 2))
graphique(var1 = listvar[, which(listnomvar == varChoice1)], var2 = listvar[,which(listnomvar == varChoice2)],
obs = obs, num = num_supp, graph = graphChoice, couleurs = col[1], symbol = pch[1], labvar = c(varChoice1, varChoice2))
}
}
####################################################
# selection d'un polygone sur la carte
####################################################
poly1func <- function() {
method <<- ifelse(flower, "Neighbourplot1", "")
graph <<- "Moran"
if (quad) {
SGfunc()
quad <<- FALSE
}
maptest <<- TRUE
polyfunc()
}
####################################################
# selection d'un polygone sur le graphique
####################################################
poly2func <- function() {
method <<- ifelse(flower, "Neighbourplot1", "")
graph <<- "Moran"
if (quad) {
SGfunc()
quad <<- FALSE
}
maptest <<- FALSE
polyfunc()
}
####################################################
# selection d'un quadrant
####################################################
quadfunc <- function() {
if (!quad) {
SGfunc()
quad <<- TRUE
}
obs[which(obsq == num)] <<- !obs[which(obsq == num)]
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = num_graph,
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
if ((graphChoice != "") && (varChoice1 != "") && (length(dev.list()) > 2))
graphique(var1 = listvar[, which(listnomvar == varChoice1)], var2 = listvar[,which(listnomvar == varChoice2)],
obs = obs, num = num_supp, graph = graphChoice, couleurs = col[1], symbol = pch[1], labvar = c(varChoice1, varChoice2))
}
####################################################
# selection d'un des 4 quadrants
####################################################
quad1func <- function() {
num <<- 1
method <<- ifelse(flower, "Neighbourplot1", "Quadrant")
quadfunc()
}
quad2func <- function() {
num <<- 2
method <<- ifelse(flower, "Neighbourplot1", "Quadrant")
quadfunc()
}
quad3func <- function() {
num <<- 3
method <<- ifelse(flower, "Neighbourplot1", "Quadrant")
quadfunc()
}
quad4func <- function() {
num <<- 4
method <<- ifelse(flower, "Neighbourplot1", "Quadrant")
quadfunc()
}
####################################################
# Differentes couleurs selon le quadrant
####################################################
colfunc <- function() {
if (!choix.col) {
choix.col <<- TRUE
method <<- "Quadrant"
res1 <- choix.couleur("Moran", col = col[1], pch = pch[1], legends = legends, spdf = T,
num_graph = num_graph, num_carte = num_carte)
if (length(res1$col2) == 4) {
col2 <<- res1$col2
col3 <<- col2
} else {
col2 <<- rep(col[1], 4)
col3 <<- rep("blue", 4)
}
if (length(res1$pch2) == 4)
pch2 <<- res1$pch2
else
pch2 <<- rep(pch[1], 4)
legends <<- res1$legends
} else {
choix.col <<- FALSE
col2 <<- rep(col[1], 4)
col3 <<- rep("blue", 4)
pch2 <<- rep(pch[1], 4)
legends <<- list(legends[[1]], FALSE, legends[[3]], "")
}
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = num_graph,
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
}
####################################################
# choix d'un autre graphique
####################################################
graphfunc <- function() {
if ((length(listvar) != 0) && (length(listnomvar) != 0)) {
choix <<- selectgraph(listnomvar,listgraph)
varChoice1 <<- choix$varChoice1
varChoice2 <<- choix$varChoice2
graphChoice <<- choix$graphChoice
if ((graphChoice != "") && (varChoice1 != "")) {
if(is.na(num_supp)) {
dev.new(noRStudioGD = FALSE)
num_supp <<- dev.list()[length(dev.list())]
}
graphique(var1 = listvar[, which(listnomvar == varChoice1)], var2 = listvar[,which(listnomvar == varChoice2)],
obs = obs, num = num_supp, graph = graphChoice, couleurs = col[1], symbol = pch[1], labvar = c(varChoice1, varChoice2))
}
} else {
tkmessageBox(message = "List of Variables and list of variables names must have been given",
icon ="warning", type = "ok")
}
}
####################################################
# contour des unites spatiales
####################################################
cartfunc <- function() {
if (length(carte) != 0) {
nocart <<- !nocart
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
} else {
tkmessageBox(message = "Spatial contours have not been given",
icon = "warning", type = "ok")
}
}
####################################################
# rafraichissement des graphiques
####################################################
SGfunc<-function() {
obs <<- vector(mode = "logical", length = length(long));
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = num_graph,
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
if ((graphChoice != "") && (varChoice1 != ""))
graphique(var1 = listvar[, which(listnomvar == varChoice1)], var2 = listvar[,which(listnomvar == varChoice2)],
obs = obs, num = num_supp, graph = graphChoice, couleurs = col[1], symbol = pch[1], labvar = c(varChoice1, varChoice2))
}
####################################################
# quitter l'application
####################################################
quitfunc <- function() {
tkdestroy(tt)
assign("GeoXp.open", FALSE, envir = envir)
dev.off(num_graph)
dev.off(num_carte)
if (!is.na(num_supp))
dev.off(num_supp)
}
quitfunc2 <- function() {
fig_save <- "fig_GeoXp.pdf"
map_save <- "map_GeoXp.pdf"
k <- 1
while(file.exists(fig_save)) {
fig_save <- paste("fig_GeoXp", "_", k, ".pdf", sep = "")
k <- k + 1
}
pdf(fig_save)
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = dev.list()[length(dev.list())],
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
dev.off()
k <- 1
while(file.exists(map_save)) {
map_save <- paste("map_GeoXp", "_", k, ".pdf", sep = "")
k <- k + 1
}
pdf(map_save)
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = dev.list()[length(dev.list())],
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
dev.off()
if(!is.na(num_supp)) {
fig_supp <- "fig_supp_GeoXp.pdf"
k <- 1
while(file.exists(fig_supp)) {
fig_supp <- paste("fig_supp_GeoXp", "_", k, ".pdf", sep = "")
k <- k + 1
}
pdf(fig_supp)
graphique(var1 = listvar[, which(listnomvar == varChoice1)], var2 = listvar[,which(listnomvar == varChoice2)],
obs = obs, num = dev.list()[length(dev.list())], graph = graphChoice,
couleurs = col[1], symbol = pch[1], labvar = c(varChoice1, varChoice2))
dev.off()
}
tkdestroy(tt)
assign("GeoXp.open", FALSE, envir = envir)
cat("Results have been saved in last.select object \n")
cat("Map has been saved in", map_save, "\n")
cat("Figure has been saved in", fig_save, "\n")
if(!is.na(num_supp))
cat("Supplemental figure has been saved in", fig_supp, "\n")
assign("last.select", which(obs), envir = envir)
dev.off(num_carte)
dev.off(num_graph)
if(!is.na(num_supp))
dev.off(num_supp)
}
####################################################
# Open a no interactive selection
####################################################
fnointer<-function() {
if (length(criteria) != 0) {
nointer <<- !nointer
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
} else {
tkmessageBox(message = "Criteria has not been given", icon = "warning", type = "ok")
}
}
####################################################
# Bubble
####################################################
fbubble <- function() {
res2 <- choix.bubble(buble, listvar, listnomvar, legends, num_graph, num_carte)
buble <<- res2$buble
legends <<- res2$legends
z <<- res2$z
legmap <<- res2$legmap
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
}
####################################################
# Bubble of Lisa
####################################################
lisa <- function() {
res3 <- choix.bubble(buble2, abs(ilocal), "ilocal", legends2, num_graph, num_carte)
buble2 <<- res3$buble
legends2 <<- res3$legends
z2 <<- res3$z
legmap2 <<- res3$legmap
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = num_graph,
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
}
####################################################
# Permutation
####################################################
permutation <- function() {
tt1 <- tktoplevel()
Name <- tclVar("n")
entry.Name <- tkentry(tt1, width = "5", textvariable = Name)
tkgrid(tklabel(tt1, text = "Number of simulations"), entry.Name)
OnOK <- function() {
value1 <- tclvalue(Name)
tkdestroy(tt1)
if(is.na(as.integer(value1))) {
tkmessageBox(message = "Sorry, but you have to choose decimal values",
icon = "warning", type = "ok")
} else {
n <- as.integer(value1)
perm <- NULL
for (i in 1:n) {
sam <- sample(var, length(var))
sam <- sam - mean(sam)
epe <- sam %*% sam
mi <- (sam %*% W %*% sam)/epe
morani <- round(mi, 4)
perm <- c(perm, morani)
}
msg <- paste("The p-value of the permutation test is :",
1 - length(which(perm < rep(MORAN, n)))/n)
tkmessageBox(message = msg, icon = "info", type = "ok")
}
}
OK.but <-tkbutton(tt1, text = " OK ", command = OnOK)
tkgrid(OK.but)
tkfocus(tt1)
}
#################################################
########### Representation
carte(long = long, lat = lat, obs = obs, sf.obj = sf.obj, num = num_carte,
carte = carte, nocart = nocart, classe = obsq, couleurs = col3, symbol = pch2,
W = W, method = method, buble = buble, cbuble = z, criteria = criteria,
nointer = nointer, legmap = legmap, legends = legends, axis = axes, lablong = lablong, lablat = lablat,
label = label, cex.lab = cex.lab, labmod = names.arg)
graphique(var1 = var, var2 = wvar, var3 = ilocal, obs = obs, num = num_graph,
graph = graph, labvar = labvar, couleurs = col2, symbol = pch2,
locmoran = locmoran, obsq = obsq, cex.lab = cex.lab, buble = buble2, cbuble = z2,
legmap = legmap2, legends = legends2, bin = is.norm)
####################################################
# creation de la boite de dialogue
####################################################
if (interactive()) {
fontheading <- tkfont.create(family = "times", size = 14, weight = "bold")
tt <- tktoplevel()
tkwm.title(tt, "moranplotmap")
frame1a <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
tkpack(tklabel(frame1a, text = "Interactive selection", font = "Times 14",
foreground = "blue", background = "white"))
tkpack(tklabel(frame1a, text = "Work on the map", font = "Times 12",
foreground = "darkred", background = "white"))
point.but <- tkbutton(frame1a, text = "Selection by point", command = pt1func)
poly.but <- tkbutton(frame1a, text = "Selection by polygon ", command = poly1func)
tkpack(point.but, poly.but, side = "left", expand = "TRUE",fill = "x")
tkpack(frame1a, expand = "TRUE", fill = "x")
frame1c <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
tkpack(tklabel(frame1c, text = "Work on the graphic", font = "Times 12",
foreground = "darkred", background = "white"))
point2.but <- tkbutton(frame1c, text = "Selection by point", command = pt2func)
poly2.but <- tkbutton(frame1c, text = "Selection by polygon ", command = poly2func)
tkpack(point2.but, poly2.but, side = "left", expand = "TRUE",fill = "x")
tkpack(frame1c, expand = "TRUE", fill = "x")
frame1d <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
tkpack(tklabel(frame1d, text = "Select a quadrant", font = "Times 12",
foreground = "darkred", background = "white"))
HH.but <- tkbutton(frame1d, text = "H.-H.", command = quad1func)
LH.but <- tkbutton(frame1d, text = "H.-L.", command = quad4func)
LL.but <- tkbutton(frame1d, text = "L.-L.", command = quad3func)
HL.but <- tkbutton(frame1d, text = "L.-H.", command = quad2func)
tkpack(HH.but, LH.but, LL.but, HL.but, side = "left", expand = "TRUE", fill = "x")
tkpack(frame1d, expand = "TRUE", fill = "x")
frame1b <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
nettoy.but <- tkbutton(frame1b, text = " Reset selection " , command = SGfunc)
tkpack(nettoy.but, side = "left", expand = "TRUE", fill = "x")
tkpack(frame1b, expand = "TRUE", fill = "x")
frame11a <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
tkpack(tklabel(frame11a, text = "Moran test", font = "Times 14",
foreground = "blue", background = "white"))
tkpack(frame11a, expand = "TRUE", fill = "x")
frame11b <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
msg <- paste("Moran index ",ifelse(is.norm,"(W normalized)","(W not normalized)"), ": ",
MORAN, " - ", "p-value (Gaussian Test) : ",
ifelse(round(1 - prob.I, 4) < 0.0001, "<0.0001", round(1 - prob.I, 4)))
tkgrid(tklabel(frame11b, text = msg), columnspan = 2)
tkpack(frame11b, expand = "TRUE", fill = "x")
frame11c <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
noint10.but <- tkbutton(frame11c, text = "Permutation Test", command = permutation)
tkpack(noint10.but, side = "left", expand = "TRUE", fill = "x")
tkpack(frame11c, expand = "TRUE", fill = "x")
frame2 <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
tkpack(tklabel(frame2, text = "Options", font = "Times 14",
foreground = "blue", background = "white"))
tkpack(tklabel(frame2, text = "Spatial contours", font = "Times 10",
foreground = "darkred", background = "white"),
tklabel(frame2, text = "Preselected sites", font = "Times 10",
foreground = "darkred", background = "white"),
tklabel(frame2, text = "Bubbles", font = "Times 10",
foreground = "darkred", background = "white"),
tklabel(frame2, text = "Additional graph", font = "Times 10",
foreground = "darkred", background = "white"), side = "left", fill="x", expand = "TRUE")
tkpack(frame2, expand = "TRUE", fill = "x")
frame2b <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
nocou1.but <- tkbutton(frame2b, text = "On/Off", command = cartfunc)
noint1.but <- tkbutton(frame2b, text = "On/Off", command = fnointer)
bubble.but <- tkbutton(frame2b, text = "On/Off", command = fbubble)
autre.but <- tkbutton(frame2b, text = " OK " , command = graphfunc)
tkpack(nocou1.but,noint1.but,bubble.but,autre.but, side = "left", expand = "TRUE", fill = "x")
tkpack(frame2b, expand = "TRUE", fill = "x")
frame2e <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
tkpack(tklabel(frame2e, text = "Print different colors by quadrant ", font = "Times 10",
foreground = "darkred", background = "white"),
tklabel(frame2e, text = "Bubles of LISA", font = "Times 10",
foreground = "darkred", background = "white"), side = "left", fill="x", expand = "TRUE")
tkpack(frame2e, expand = "TRUE", fill = "x")
frame2f <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
colquad.but <- tkbutton(frame2f, text = "On/Off", command = colfunc)
lisa.but <- tkbutton(frame2f, text = " OK " , command = lisa)
tkpack(colquad.but,lisa.but, side = "left", expand = "TRUE", fill = "x")
tkpack(frame2f, expand = "TRUE", fill = "x")
frame3 <- tkframe(tt, relief = "groove", borderwidth = 2, background = "white")
tkpack(tklabel(frame3, text = "Exit", font = "Times 14",
foreground = "blue", background = "white"))
quit.but <- tkbutton(frame3, text = "Save results", command = quitfunc2)
quit.but2 <- tkbutton(frame3, text = "Exit without saving", command = quitfunc)
tkpack(quit.but, quit.but2, side = "left", expand = "TRUE",
fill = "x")
tkpack(frame3, expand = "TRUE", fill = "x")
}
####################################################
return(invisible())
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.