複数の変数を持つクラス内相関係数(ICC)


13

兄弟内のいくつかの変数を測定したと仮定します。兄弟は、家族内にネストされています。データ構造は次のようになります。

家族の兄弟価値
------ ------- -----
1 1 y_11
1 2 y_12
2 1 y_21
2 2 y_22
2 3 y_23
... ... ...

同じ家族内の兄弟で行われた測定値間の相関関係を知りたい。これを行う通常の方法は、ランダム切片モデルに基づいてICCを計算することです。

res <- lme(yij ~ 1, random = ~ 1 | family, data=dat)
getVarCov(res)[[1]] / (getVarCov(res)[[1]] + res$s^2)

これは次と同等です:

res <- gls(yij ~ 1, correlation = corCompSymm(form = ~ 1 | family), data=dat)

ただし、後者のアプローチでは負のICCも許可されます。

ここで、家族内にネストされた兄弟の3つのアイテムを測定したとします。したがって、データ構造は次のようになります。

家族の兄弟アイテムの値
------ ------- ---- -----
1 1 1 y_111
1 1 2 y_112
1 1 3 y_113
1 2 1 y_121
1 2 2 y_122
1 2 3 y_123
2 1 1 y_211
2 1 2 y_212
2 1 3 y_213
2 2 1 y_221
2 2 2 y_222
2 2 3 y_223
2 3 1 y_231
2 3 2 y_232
2 3 3 y_233
... ... ... ...

今、私はについて知りたい:

  1. 同じアイテムの同じファミリ内の兄弟で取得した測定値間の相関
  2. 異なるアイテムについて同じファミリー内の兄弟で取得した測定値間の相関

家族内に兄弟のペアしかなかった場合は、次のようにします。

res <- gls(yijk ~ item, correlation = corSymm(form = ~ 1 | family), 
           weights = varIdent(form = ~ 1 | item), data=dat)

これにより、次の形式の残差に関する6×6 var-cov行列が得られます。

[σ12ρ12σ1σ2ρ13σ1σ3ϕ11σ12ϕ12σ1σ2ϕ13σ1σ3σ22ρ23σ2σ3ϕ22σ22ϕ23σ2σ3σ32ϕ33σ32σ12ρ12σ1σ2ρ13σ1σ3σ22ρ23σ2σ3σ32]

これに基づいて、これらの相互兄弟相関を簡単に推定できました(値は同じアイテムのICCです。値は異なるアイテムのICCです)。ただし、上記のように、一部の家族には兄弟が2人しかいませんが、他の家族には2人以上います。そのため、分散コンポーネントタイプのモデルに戻る必要があると思います。ただし、アイテム間の相関関係は負になる可能性があるため、相関関係が正になるように制約するモデルを使用したくありません。ϕjjϕjj

これにどのようにアプローチできるかについてのアイデア/提案はありますか?助けてくれてありがとう!

回答:


1

パッケージMCMCglmmは、共分散構造とランダム効果を簡単に処理および推定できます。ただし、新しいユーザーを脅かす可能性のあるベイジアン統計を使用します。MCMCglmmの詳細なガイドについてはMCMCglmmコースノートを、特にこの質問に関する第5章を参照してください。MCMCglmmでデータを実際に分析する前に、モデルの収束とチェーンミキシングの評価について読むことを絶対にお勧めします。

library(MCMCglmm)

MCMCglmmは事前分布を使用します。これは情報価値のない逆ウィッシュアート事前分布です。

p<-list(G=list(
  G1=list(V=diag(2),nu=0.002)),
R=list(V=diag(2),nu=0.002))

モデルを適合させる

m<-MCMCglmm(cbind(x,y)~trait-1,
#trait-1 gives each variable a separate intercept
        random=~us(trait):group,
#the random effect has a separate intercept for each variable but allows and estiamtes the covariance between them.
        rcov=~us(trait):units,
#Allows separate residual variance for each trait and estimates the covariance between them
        family=c("gaussian","gaussian"),prior=p,data=df)

モデルの要約でsummary(m)は、G構造はランダムな切片の分散と共分散を表します。R構造は、MCMCglmmの残差として機能する観測レベルの分散と切片の共分散を記述します。

ベイジアン説得力がある場合は、共分散項の事後分布全体を取得できます m$VCV。これらは固定効果を考慮した後の差異であることに注意してください。

データをシミュレートする

library(MASS)
n<-3000

#draws from a bivariate distribution
df<-data.frame(mvrnorm(n,mu=c(10,20),#the intercepts of x and y
                   Sigma=matrix(c(10,-3,-3,2),ncol=2)))
#the residual variance covariance of x and y


#assign random effect value
number_of_groups<-100
df$group<-rep(1:number_of_groups,length.out=n)
group_var<-data.frame(mvrnorm(number_of_groups, mu=c(0,0),Sigma=matrix(c(3,2,2,5),ncol=2)))
#the variance covariance matrix of the random effects. c(variance of x,
#covariance of x and y,covariance of x and y, variance of y)

#the variables x and y are the sum of the draws from the bivariate distribution and the random effect
df$x<-df$X1+group_var[df$group,1]
df$y<-df$X2+group_var[df$group,2]

ランダム効果の元の共分散を推定するには、ランダム効果に対する多数のレベルが必要です。代わりに、モデルはおそらく、次の式で計算できる観測された共分散を推定します。cov(group_var)


0

「家族効果」と「アイテム効果」を取得しようとしている場合、これらの両方にランダムなインターセプトがあると考えて、「lme4」パッケージでこれをモデル化できます。

ただし、最初に、各兄弟に、家族内の一意のIDではなく、一意のIDを指定する必要があります

次に、「異なるアイテムの同じファミリ内の兄弟で行われた測定値の相関」に対して、次のようなものを指定できます。

mod<-lmer(value ~ (1|family)+(1|item), data=family)

これにより、すべての兄弟の固定効果インターセプトが得られ、次に家族とアイテムの2つのランダム効果インターセプト(分散あり)が得られます。

次に、「同じアイテムの同じファミリ内の兄弟で行われた測定値の相関」について、同じことを行うことができますが、データをサブセット化するだけなので、次のようになります。

mod2<-lmer(value ~ (1|family), data=subset(family,item=="1")) 

これはあなたの質問へのより簡単なアプローチかもしれないと思います。ただし、アイテムまたはファミリーのICCだけが必要な場合、「psych」パッケージにはICC()関数があります。サンプルデータでアイテムと値がどのように溶けているかに注意してください。

更新

以下のいくつかは私にとって新しいものですが、私はそれをうまく楽しんでいます。私は、クラス内の負の相関の考え方にあまり詳しくありません。ウィキペディアでは、「初期のICC定義」により、ペアのデータとの負の相関関係が認められたことがわかりました。しかし、現在最も一般的に使用されているICCは、グループ間の分散である合計分散の割合として理解されます。そして、この値は常に正です。ウィキペディアは最も権威のある参照ではないかもしれませんが、この要約は私がICCを使用しているのを見てきました。

このANOVAフレームワークの利点は、異なるグループが異なる数のデータ値を持つことができることです。これは、以前のICC統計を使用して処理することは困難です。また、このICCは常に負ではないため、「グループ間」の合計分散の割合として解釈できることに注意してください。共変量調整済みデータ値のクラス内の類似性。

ただし、ここで示したようなデータでは、アイテム1、2、および3の間のクラス間相関は非常にマイナスになる可能性があります。そして、これをモデル化することはできますが、グループ間で説明される分散の割合は依然として正です。

# load our data and lme4
library(lme4)    
## Loading required package: Matrix    

dat<-read.table("http://www.wvbauer.com/fam_sib_item.dat", header=TRUE)

では家族の差異の何パーセントが、品目グループ間のグループ間の差異も制御していますか?あなたが提案したようなランダムなインターセプトモデルを使用できます。

mod<-lmer(yijk ~ (1|family)+(1|item), data=dat)
summary(mod)    
## Linear mixed model fit by REML ['lmerMod']
## Formula: yijk ~ (1 | family) + (1 | item)
##    Data: dat
## 
## REML criterion at convergence: 4392.3
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.6832 -0.6316  0.0015  0.6038  3.9801 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  family   (Intercept) 0.3415   0.5843  
##  item     (Intercept) 0.8767   0.9363  
##  Residual             4.2730   2.0671  
## Number of obs: 1008, groups:  family, 100; item, 3
## 
## Fixed effects:
##             Estimate Std. Error t value
## (Intercept)    2.927      0.548   5.342

2つの変量効果の切片と残差から分散を取得することにより、ICCを計算します。次に、すべての分散の平方和に対して家族分散の平方を計算します。

temp<-as.data.frame(VarCorr(mod))$vcov
temp.family<-(temp[1]^2)/(temp[1]^2+temp[2]^2+temp[3]^2)
temp.family    
## [1] 0.006090281

その後、他の2つの分散推定値についても同じことができます。

# variance between item-groups
temp.items<-(temp[2]^2)/(temp[1]^2+temp[2]^2+temp[3]^2)
temp.items    
## [1] 0.04015039    
# variance unexplained by groups
temp.resid<-(temp[3]^2)/(temp[1]^2+temp[2]^2+temp[3]^2)
temp.resid    
## [1] 0.9537593    
# clearly then, these will sum to 1
temp.family+temp.items+temp.resid    
## [1] 1

これらの結果は、家族間または品目グループ間の分散によって説明される総分散のほとんどはないことを示唆しています。ただし、上記のように、アイテム間のクラス相関依然として負の値になる可能性があります。最初に、より広い形式でデータを取得しましょう。

# not elegant but does the trick
dat2<-cbind(subset(dat,item==1),subset(dat,item==2)[,1],subset(dat,item==3)[,1])
names(dat2)<-c("item1","family","sibling","item","item2","item3")

これで、前と同様に、たとえば、item1とitem3の間の相関を家族のランダムな切片でモデル化できます。ただし、最初に、単純な線形回帰の場合、モデルのr 2乗の平方根はitem1とitem2のクラス間相関係数(ピアソンのr)と同じであることを思い出してください。

# a simple linear regression
mod2<-lm(item1~item3,data=dat2)
# extract pearson's r 
sqrt(summary(mod2)$r.squared)    
## [1] 0.6819125    
# check this 
cor(dat2$item1,dat2$item3)    
## [1] 0.6819125    
# yep, equal

# now, add random intercept to the model
mod3<-lmer(item1 ~ item3 + (1|family), data=dat2)
summary(mod3)    

## Linear mixed model fit by REML ['lmerMod']
## Formula: item1 ~ item3 + (1 | family)
##    Data: dat2
## 
## REML criterion at convergence: 1188.8
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.3148 -0.5348 -0.0136  0.5724  3.2589 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  family   (Intercept) 0.686    0.8283  
##  Residual             1.519    1.2323  
## Number of obs: 336, groups:  family, 100
## 
## Fixed effects:
##             Estimate Std. Error t value
## (Intercept) -0.07777    0.15277  -0.509
## item3        0.52337    0.02775  18.863
## 
## Correlation of Fixed Effects:
##       (Intr)
## item3 -0.699

item1とitem3の間の関係は正です。ただし、ここで負の相関が得られることを確認するために、データを操作しましょう。

# just going to multiply one column by -1
# to force this cor to be negative

dat2$neg.item3<-dat2$item3*-1
cor(dat2$item1, dat2$neg.item3)    
## [1] -0.6819125    

# now we have a negative relationship
# replace item3 with this manipulated value

mod4<-lmer(item1 ~ neg.item3 + (1|family), data=dat2)
summary(mod4)    

## Linear mixed model fit by REML ['lmerMod']
## Formula: item1 ~ neg.item3 + (1 | family)
##    Data: dat2
## 
## REML criterion at convergence: 1188.8
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.3148 -0.5348 -0.0136  0.5724  3.2589 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  family   (Intercept) 0.686    0.8283  
##  Residual             1.519    1.2323  
## Number of obs: 336, groups:  family, 100
## 
## Fixed effects:
##             Estimate Std. Error t value
## (Intercept) -0.07777    0.15277  -0.509
## neg.item3   -0.52337    0.02775 -18.863
## 
## Correlation of Fixed Effects:
##           (Intr)
## neg.item3 0.699

そのため、アイテム間の関係は負になる可能性があります。しかし、この関係にある家族間の分散の割合、つまりICC(family)を見ると、その数はまだ正の数になります。従来通り:

temp2<-as.data.frame(VarCorr(mod4))$vcov
(temp2[1]^2)/(temp2[1]^2+temp2[2]^2)    
## [1] 0.1694989

したがって、item1とitem3の関係では、この分散の約17%は家族間の分散によるものです。また、アイテム間には負の相関関係があることを引き続き許可しています。


提案に感謝しますが、これが実際にどのように相関関係を提供するかわかりません。ここにいくつかのデータを投稿しました:wvbauer.com/fam_sib_item.dat 9つの異なる相関(および3つのアイテムの分散)を推定したいことに注意してください。
ウルフギャング

次に、関連する質問 の最初のリストをご覧ください。最終的に探しているのが9つの異なるICCのみである場合、この投稿の答えは非常に良いです。
-5ayat

再度感謝しますが、それでも9つのICCをどのように提供しますか?そこで議論されているモデルはそれを提供していません。また、負のICCを許可しない分散コンポーネントモデルですが、前述したように、すべてのICCが正であるとは考えていません。
ウルフギャング

私はこのようなモデルでの負のICCの問題に精通していません-このような制約はありません。ただし、この相関関係を計算するには、上記のコードでモデルの概要を見ると、3つの分散推定値、家族、アイテム、残差があります。たとえば、他の投稿で説明されているように、ICC(family)はvar(family)^ 2 /(var(family)^ 2 + var(item)^ 2)+ var(residual)^ 2)になります。言い換えれば、2つの変量効果と残差の分散2乗の合計に対して2乗した結果の分散です。ファミリとアイテムの9つの組み合わせを繰り返します。
5ayat

1
9種類のICCのどれにvar(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)対応しますか?そして、はい、ICCはマイナスになる可能性があります。質問の冒頭で述べたように、gls()モデルを使用してICCを直接推定できます。これにより、負の推定が可能になります。一方、分散コンポーネントモデルでは、負の推定値は許可されません。
ウルフギャング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.