R coda "Ведущий несовершеннолетний 3-го порядка не является положительно определенным"

Может кто-нибудь объяснить мне, что означает это сообщение об ошибке?

У меня есть метод выборки MCMC под названием hitandrun (в незаконченном пакете https://github.com/davidkane9/kmatching), который дает мне список матриц, которые имеют столбцы в виде многомерного вывода отдельных выборок, вот пример его в действии:

> A = matrix(1, ncol = 3)
> b = 1
> ## gives me solutions of Ax = b (a.k.a x + y + z = 1)
> h = hitandrun(A,b, n=10, chains = 2)
> h
[[1]]
          [,1]      [,2]      [,3]      [,4]      [,5]       [,6]      [,7]      [,8]      [,9]
[1,] 0.1804431 0.3340590 0.4195820 0.2061222 0.3591085 0.09984353 0.6707110 0.3926639 0.1283919
[2,] 0.6135745 0.4256909 0.3619727 0.2918238 0.5057426 0.81919629 0.2368842 0.1178713 0.2666737
[3,] 0.2059824 0.2402501 0.2184453 0.5020541 0.1351489 0.08096018 0.0924048 0.4894647 0.6049344
         [,10]
[1,] 0.1322112
[2,] 0.4736057
[3,] 0.3941831

[[2]]
           [,1]      [,2]      [,3]      [,4]       [,5]       [,6]      [,7]       [,8]      [,9]
[1,] 0.32883534 0.1284182 0.1735151 0.2005726 0.94511422 0.61653717 0.5130324 0.33228224 0.2088865
[2,] 0.65868549 0.3066952 0.5182009 0.3065610 0.01214334 0.07007548 0.1191157 0.01137002 0.3311197
[3,] 0.01247917 0.5648866 0.3082840 0.4928664 0.04274244 0.31338735 0.3678519 0.65634774 0.4599938
          [,10]
[1,] 0.61412223
[2,] 0.32289039
[3,] 0.06298738

Я хотел посмотреть диагностику Гельмана-Рубина по этим данным, узнать, насколько мне нужно их разбавить, но когда я включаю их в работу, я получаю непонятную ошибку и не знаю, что это значит. Вот что:

> mclist = lapply(h, function(x) mcmc(t(x), thin = 5))
> gelman.diag(mclist)
Error in chol.default(W) : 
  the leading minor of order 1 is not positive definite

(Полагаю, сейчас это порядок 1, но до этого был порядок 3) Есть ли эксперты по кодам на SO? Я попытался отладить его, но он приводит меня к внутренней функции La_chol, и я не знаю, что делать дальше.

2 ответа

Кажется, что-то не так с получением многомерной оценки диагностики Гельмана-Рубина. настройка multivariate = FALSE устраняет проблему и выводит оценку по одной переменной для каждой переменной. Однако большинство моих переменных коррелируют из-за характера проблемы, которую я пытаюсь решить, поэтому я удивляюсь (и надеюсь), что это дает мне переоценку диагностики.

У меня недавно была эта проблема с моей моделью - я обнаружил, что моя матрица не была симметричной, так как это была асимметричная матрица GRM. Я использовал эту функцию, чтобы сделать ее симметричной, и проблема была решена (взято из Наиболее эффективного способа создания симметричной матрицы):

symmetrise <- function(mat){   rowscols <- which(lower.tri(mat), arr.ind=TRUE)   sparseMatrix(i=rowscols[,1], 
               j=rowscols[,2], 
               x=mat[lower.tri(mat)], 
               symmetric=TRUE, 
               dims=c(nrow(mat),ncol(mat)) )   }

Это повторяет нижнюю левую часть в верхнюю правую часть.

Другие вопросы по тегам