2017-10-12 8 views
0

Je souhaite utiliser la fonction gls dans le paquet R nlme pour analyser un ensemble d'échantillons spatiaux imbriqués, dans lequel de nombreux échantillons se chevauchent dans au moins quelques coordonnées spatiales. Je veux prendre en compte la non-indépendance dans la variable de réponse (la chose que je mesure dans chaque échantillon spatial) en utilisant soit un objet corStruct ou pdMat, mais je suis confus sur la façon de faire cela.Puis-je utiliser une matrice de covariance pour spécifier la structure de corrélation dans la fonction nlme gls?

J'ai généré une matrice de covariance qui devrait coder toutes les informations sur la non-indépendance entre les échantillons spatiaux. Chaque ligne/colonne est un échantillon spatial distinct, la diagonale contient le nombre total d'unités d'échantillonnage capturées par chaque échantillon spatial, et les éléments hors diagonale contiennent des comptes d'unités d'échantillonnage partagées entre des échantillons spatiaux.

Je pense que je devrais utiliser la fonction nlme gls en spécifiant une structure de corrélation, en utilisant éventuellement un objet corSymm ou pdMat. Mais j'ai seulement vu des exemples où la structure de corrélation dans gls est spécifiée via une formule. Comment puis-je utiliser la matrice de covariance que j'ai créée?

+0

Si vous avez des questions sur la meilleure façon de modéliser vos données, vous devriez demander à [stats.se]. Cela ne semble pas être une question de programmation spécifique appropriée pour Stack Overflow. – MrFlick

+0

Je demande comment obtenir spécifiquement la structure de covariance dans la fonction nlme gls, cependant. Dois-je utiliser corSymm? pdMat? – Roger

Répondre

0

J'ai découvert que vous pouvez passer la nlme fonction gls une matrice de corrélation positive définie en utilisant la structure de corrélation générale fournie par 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")