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)) ) }
Это повторяет нижнюю левую часть в верхнюю правую часть.