Можно ли использовать ковариационную матрицу для задания корреляционной структуры в функции nlme gls?

Я хочу использовать функцию gls в пакете R nlme для анализа набора вложенных пространственных выборок, в которых многие выборки перекрываются по крайней мере в некоторых пространственных координатах. Я хочу учитывать независимость в переменной ответа (вещь, которую я измеряю в каждой пространственной выборке) с помощью объекта corStruct или pdMat, но я не понимаю, как это сделать.

Я сгенерировал ковариационную матрицу, которая должна кодировать всю информацию о независимости между пространственными выборками. Каждая строка/столбец представляет собой отдельную пространственную выборку, диагональ содержит общее количество единиц выборки, захваченных каждой пространственной выборкой, а недиагональные элементы содержат количество единиц выборки, общих для пространственных выборок.

Я думаю, что мне следует использовать функцию nlme gls при указании корреляционной структуры, возможно, используя объект corSymm или pdMat. Но я видел только примеры, когда структура корреляции в gls задается формулой. Как я могу использовать созданную мной ковариационную матрицу?


person Roger    schedule 12.10.2017    source источник
comment
Если у вас есть вопросы о наилучшем способе моделирования данных, задайте их на странице Cross Validated. Это не похоже на конкретный вопрос программирования, который подходит для переполнения стека.   -  person MrFlick    schedule 12.10.2017
comment
Однако я спрашиваю, как конкретно получить ковариационную структуру в функции nlme gls. Должен ли я использовать corSymm? пдмат?   -  person Roger    schedule 12.10.2017


Ответы (1)


Я обнаружил, что вы можете передать nlme функции gls положительно определенную корреляционную матрицу, используя общую структуру корреляции, предоставленную corSymm.

# convert your variance covariance matrix into a correlation matrix
CM <- cov2cor(vcv_matrix)

# if your correlation matrix contains zeros, as mine did, you need to convert it to a positive-definite matrix that substitutes very small numbers for those zeros
CM <- nearPD(CM)$mat

# convert into a corStruct object using general correlation structure provided by corSymm
C <- corSymm(CM[lower.tri(CM)], fixed = T)

# correlation structure can now be included in a gls model
gls(y ~ x, correlation = C, method = "ML")
person Roger    schedule 26.10.2017
comment
FWIW не содержит нулей, о которых вам нужно беспокоиться с помощью nearPD(), это неположительная определенность (например, единичная матрица подойдет, даже если она содержит много нулей...) - person Ben Bolker; 09.07.2020