2013-09-21 3 views
8

У меня 4000 записей объема в плантациях деревьев. Мне нужно рассчитать Моран I на всю плантацию. Я использую ape библиотека, потому что spdep говорят, что он медленнее. Мой код заключается в следующем:Расчет Моран I с 4000 записями

# Modified from http://www.ats.ucla.edu/stat/r/faq/morans_i.htm 
require(ape) 
df <- data.frame(
    x = 1:2000, 
    y = 1:2000, 
    v = rnorm(4000, mean=4)) 
df.dists <- as.matrix(dist(cbind(df$x, df$y))) 
df.dists.inv <- 1/df.dists 
diag(df.dists.inv) <- 0 
Moran.I(df$v, df.dists.inv) 

Когда я запускаю код, я получаю переполнение подобных ошибок.

*Error in if (obs <= ei) 2 * pv else 2 * (1 - pv) : 
    missing value where TRUE/FALSE needed* 

Использование библиотеки далее

require(ape) 
require(ff) 
ffdf <- as.ffdf(df) 
ffdf.dists <- as.matrix(dist(cbind(ffdf$x, ffdf$y))) 
ffdf.dists.inv <- 1/df.dists 
diag(ffdf.dists.inv) <- 0 
Moran.I(ffdf$v, ffdf.dists.inv) 

Больше сообщений об ошибках:

*Error in x - m : non-numeric argument to binary operator 
In addition: Warning message: 
In mean.default(x) : argument is not numeric or logical: returning NA* 
  • Как я могу получить расчет на всю плантацию?

  • Должен ли я использовать sdep вместо обезьяну библиотеки?

  • Как можно parallel библиотека решает эту проблему?

Заранее спасибо Juan

+0

Вы должны 'set.seed', чтобы сделать вашу проблему воспроизводимой. Нет необходимости использовать большую матрицу (вы можете использовать небольшую матрицу, и вы получите ту же проблему, если у вас есть некоторые бесконечные значения). – agstudy

ответ

8

У вас есть какие-то бесконечные значения в вашей матрице. Это должно работать в 2-х случаях (с и без пакета и след)

df.dists.inv[is.infinite(df.dists.inv)] <- 0 

Применяя это с небольшим примером:

require(ape) 
set.seed(1) 
df <- data.frame(
    x = 1:10, 
    y = 1:10, 
    v = rnorm(20, mean=4)) 
..... 

df.dists.inv[is.infinite(df.dists.inv)] <- 0 
Moran.I(df$v, df.dists.inv) 

$observed 
[1] -0.02246154 

$expected 
[1] -0.05263158 

$sd 
[1] 0.05399303 

$p.value 
[1] 0.5763143 
+0

Это так приятно! Простая ошибка в \t расчет веса. ** Tnank you! ** – jlopez

+0

Добро пожаловать! Я вижу ошибку, потому что я попытался воспроизвести проблему в небольшой матрице. – agstudy

+0

Спасибо @egstudy. Даже если ваш код решен, и мне не нужна библиотека ** ff **, когда я запускаю код с ** ff ** и бесконечным исключением, я получаю это сообщение об ошибке: ** Ошибка в x - m: числовой аргумент для двоичного оператора. Кроме того: Предупреждающее сообщение: В файле mean.default (x): аргумент не является числовым или логическим: возвращаемый NA ** – jlopez

Смежные вопросы