Joao Pedro W. de Azevedo wrote:
Dear R users,

I've written a loop to generate Moran's test (spdep package) on serval
subsamples of a large dataset. See below a short example.

My loop is working fine, however I would like to be able to store the test
results as lines of a matrix, that I would latter be able to export as a
dataset. My problem is that I'm not sure how I could do this using R.

Any help will be much appreciated.

All the very best,

JP



coords2 <- as.matrix(jcdist.data[1:87, 6:7])

col.tri.nb<-tri2nb(coords2)

for(n in c(1,88,175,262,349)) {
    f<- n+86
    work <- jcdist.data[n:f, 10:12]

res <-moran.test(spNamedVec("res1", work), nb2listw(col.tri.nb,
style="W"))
moran<-res$estimate[1]
upper<-res$estimate[1] + (qnorm(0.025, lower.tail=FALSE)
*sqrt(res$estimate[3]))
lower<-res$estimate[1] - (qnorm(0.025, lower.tail=FALSE)
*sqrt(res$estimate[3]))
print(moran)
print(upper)
print(lower)

[...]

> }


What you really want is something along the lines (untested!):

 coords2 <- as.matrix(jcdist.data[1:87, 6:7])
 col.tri.nb <- tri2nb(coords2)
 N <- c(1, 88, 175, 262, 349)
 # generate the transposed matrix of results, because
 # it is faster to assign into columns rathger than into rows:
 results <- mattrix(nrow = 3, ncol = length(N))
 # the following calculations shouldn't be done within the loop -
 # efficiency!
 f <- N + 86
 qn <- qnorm(0.025, lower.tail = FALSE)
 for(i in seq(along = N)) {
     work <- jcdist.data[n[i]:f[i], 10:12]
     res <- moran.test(spNamedVec("res1", work),
                       nb2listw(col.tri.nb, style = "W"))
     # calculate the following just once:
     ci <- qn * sqrt(res$estimate[3])
     results[,i] <- res$estimate[1] + c(1, ci, -ci)
 }
 t(results)
 colnames(results) <- c("Moran", "upper", "lower")


Uwe Ligges

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to