Как генерировать пространственно коррелированные случайные поля очень высокой размерности с R - PullRequest
1 голос
/ 16 января 2020

Это расширенный вопрос, который я нашел здесь (метод № 1: http://santiago.begueria.es/2010/10/generating-spatially-correlated-random-fields-with-r/) и здесь (метод № 2: https://gist.github.com/brentp/1306786). Я знаю, что эти два сайта очень хорошо покрыты (спасибо!) Сравнительно небольшим размером (например, 1000x1). Я пытаюсь создать пространственно кластеризованные двоичные данные с большим размером измерения, например> = 100000x1, например, c (1,1,1,1,0,1,0,0,0,0,…, 0 0,0,0,0,0,0,0,0,0,0,0) с 1000 раз / тематическое исследование. Вот немного измененные коды с сайтов.

# Method #1
dim1 <- 1000
dim2 <- 1
xy <- expand.grid(seq_len(dim1), seq_len(dim2)) 
colnames(xy) <- c("x", "y")
geo.model <- gstat(formula = z~x+y, locations = ~x+y, dummy = TRUE, beta = 0, 
            model = vgm(psill = 1,"Exp", 
            range = dim1), # Range parameter!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            nmax = 30) # Spatial correlation model
sim.mat <- predict(geo.model, newdata = xy, nsim = 1)
sim.mat[,3] <- ifelse(sim.mat[,3] > quantile(sim.mat[,3], .1), 0, 1)
plot(sim.mat[, 3])

# Method #2
# generate autocorrelated data. 
nLags = 1000 # number of lags (size of region)
# fake, uncorrelated observations
X = rnorm(nLags)
# fake sigma... correlated decreases distance.
sigma = diag(nLags)
corr = .999
sigma <- corr ^ abs(row(sigma)-col(sigma))
#sigma
# Y is autocorrelated...
Y <- t(X %*% chol(sigma))
y <- ifelse(Y >= quantile(Y, probs=.9), 1, 0)[, 1]
plot(y)

Оба метода очень хорошо работают для генерации двоичных данных, когда dim1 меньше 10000. Однако, когда я пробовал несколько сотен тысяч (например,> = 100 000), кажется, это занимает много времени или проблемы с памятью.

Например, когда я использовал «nLags = 50000» в методе № 2, я получил сообщение об ошибке («Ошибка: невозможно выделить вектор размером 9,3 Гб») после кода «sigma <- corr ^ abs (строка (сигма) -col (сигма))». </p>

Я хотел бы найти эффективный (экономящий время и память) способ генерирования таких пространственно кластеризованных двоичных данных 1000 раз (особенно с dim1> = 100000) для каждого тематического исследования (около 200 случаев) .

Я думал о применении нескольких вероятностей в «выборочной» функции или распределении вероятностей. Я не уверен, как выйти за рамки моей компетенции.

...