# Δεδομένα
x <- c(3.5, 6.5, 6.5, 3.5) # κελιά με σειρά: (1,1),(1,2),(2,1),(2,2)
n <- length(x)
xbar <- mean(x)
z <- x - xbar # αποκλίσεις από τον μέσο: (-1.5, 1.5, 1.5, -1.5)
# Rook γειτνίαση (κατευθυνόμενη)
W <- matrix(0, n, n)
W[1,2] <- W[2,1] <- 1 # (1,1) <-> (1,2)
W[1,3] <- W[3,1] <- 1 # (1,1) <-> (2,1)
W[2,4] <- W[4,2] <- 1 # (1,2) <-> (2,2)
W[3,4] <- W[4,3] <- 1 # (2,1) <-> (2,2)
Wsum <- sum(W) # = 8
# Moran's I
num <- as.numeric(t(z) %*% W %*% z) # -18
den <- sum(z^2) # 9
I <- (n / Wsum) * (num / den) # -1
# Συντεταγμένες κελιών (κεντρικά σημεία)
# Διάταξη: (row, col): (1,1) κάτω-αριστερά, (1,2) κάτω-δεξιά, (2,1) πάνω-αριστερά, (2,2) πάνω-δεξιά
centers <- data.frame(
id = 1:4,
row = c(1,1,2,2),
col = c(1,2,1,2)
)
centers$x <- centers$col
centers$y <- centers$row
# Χρώματα: αρνητική απόκλιση = ανοιχτό, θετική = πιο σκούρο
cols <- ifelse(z > 0, "grey70", "grey95")
# Πλοτ
plot(NA, xlim=c(0.5,2.5), ylim=c(0.5,2.5), xaxs="i", yaxs="i",
xlab="", ylab="", xaxt="n", yaxt="n", bty="n",
main="Rook 2×2 — Σκακιέρα, W=8, Moran’s I = -1")
# Σχεδίαση κελιών (τετράγωνα 1x1)
for (i in 1:4) {
x0 <- centers$x[i] - 0.5; x1 <- centers$x[i] + 0.5
y0 <- centers$y[i] - 0.5; y1 <- centers$y[i] + 0.5
rect(x0, y0, x1, y1, col=cols[i], border="grey40", lwd=2)
}
# Γείτονες (rook) ως γραμμές
segments(centers$x[1], centers$y[1], centers$x[2], centers$y[2], lwd=2) # κάτω οριζόντιο
segments(centers$x[1], centers$y[1], centers$x[3], centers$y[3], lwd=2) # αριστερό κάθετο
segments(centers$x[2], centers$y[2], centers$x[4], centers$y[4], lwd=2) # δεξί κάθετο
segments(centers$x[3], centers$y[3], centers$x[4], centers$y[4], lwd=2) # πάνω οριζόντιο
# Labels: τιμή και απόκλιση
text(centers$x, centers$y + 0.15, labels = sprintf("x=%.1f", x), cex=1.0)
text(centers$x, centers$y - 0.15, labels = sprintf("z=%.1f", z), cex=0.9)
# Πλαίσιο και βοηθητικό grid
box()
grid(nx=2, ny=2, lty="dotted")
# Εκτύπωση αριθμητικών αποτελεσμάτων στο console
print(list(
x = x,
xbar = xbar,
deviations = z,
Wsum = Wsum,
numerator = num,
denominator = den,
Moran_I = I
))