ค่าสัมประสิทธิ์สหสัมพันธ์สหสัมพันธ์ (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

ตอนนี้สมมติว่าฉันวัดสามรายการในพี่น้องที่ซ้อนกันภายในครอบครัว ดังนั้นโครงสร้างข้อมูลจะเป็นดังนี้:

ค่ารายการพี่น้องครอบครัว
------ ------- ---- -----
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

[σ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]

ϕ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]

การประมาณค่า co / ความแปรปรวนดั้งเดิมของเอฟเฟกต์แบบสุ่มต้องใช้ระดับจำนวนมากเพื่อเอฟเฟกต์แบบสุ่ม แต่แบบจำลองของคุณน่าจะประมาณค่า co / ผลต่างที่สังเกตได้ซึ่งสามารถคำนวณได้cov(group_var)


0

หากคุณต้องการได้รับ "เอฟเฟ็กต์ครอบครัว" และ "เอฟเฟ็กต์รายการ" เราสามารถคิดได้ว่ามีการสกัดกั้นแบบสุ่มสำหรับทั้งสองอย่างจากนั้นทำโมเดลด้วยแพ็คเกจ 'lme4'

แต่ก่อนอื่นเราต้องให้ id ที่ไม่ซ้ำกันในแต่ละพี่น้องมากกว่ารหัสที่ไม่ซ้ำกันในครอบครัว

จากนั้นสำหรับ "ความสัมพันธ์ระหว่างการวัดที่เกิดขึ้นกับพี่น้องภายในครอบครัวเดียวกันสำหรับรายการที่แตกต่างกัน " เราสามารถระบุสิ่งที่ชอบ:

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

สิ่งนี้จะทำให้เรามีเอฟเฟกต์คงที่สำหรับพี่น้องทุกคนและจากนั้นจะมีเอฟเฟกต์แบบสุ่มสองอัน (พร้อมความแปรปรวน) สำหรับครอบครัวและรายการ

จากนั้นสำหรับ "ความสัมพันธ์ระหว่างการวัดที่เกิดขึ้นกับพี่น้องภายในครอบครัวเดียวกันสำหรับรายการเดียวกัน " เราสามารถทำสิ่งเดียวกันได้ แต่เพียงแค่เซ็ตย่อยข้อมูลของเราดังนั้นเราจึงมีสิ่งต่อไปนี้:

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

ฉันคิดว่านี่อาจเป็นวิธีที่ง่ายกว่าสำหรับคำถามของคุณ แต่ถ้าคุณต้องการ ICC สำหรับรายการหรือครอบครัวแพคเกจ 'psych' มีฟังก์ชัน ICC () เพียงแค่ระมัดระวังว่าไอเท็มและคุณค่านั้นละลายในข้อมูลตัวอย่างของคุณอย่างไร

ปรับปรุง

ด้านล่างนี้เป็นของใหม่สำหรับฉัน แต่ฉันสนุกกับการออกกำลังกาย ฉันไม่คุ้นเคยกับความคิดเกี่ยวกับความสัมพันธ์เชิงลบในระดับภายใน แม้ว่าฉันจะเห็นในวิกิพีเดียว่า "ต้น ICC defintions" อนุญาตให้มีความสัมพันธ์เชิงลบกับข้อมูลที่จับคู่ แต่เนื่องจากเป็นที่ใช้กันมากที่สุดในขณะนี้ ICC จึงถูกเข้าใจว่าเป็นสัดส่วนของความแปรปรวนทั้งหมดที่เป็นความแปรปรวนระหว่างกลุ่ม และค่านี้จะเป็นค่าบวกเสมอ แม้ว่า Wikipedia อาจไม่ใช่ข้อมูลอ้างอิงที่เชื่อถือได้มากที่สุด แต่สรุปนี้สอดคล้องกับวิธีที่ฉันเห็น ICC ใช้อยู่เสมอ:

ข้อได้เปรียบของกรอบการทำงานของ ANOVA นี้คือกลุ่มต่าง ๆ สามารถมีค่าข้อมูลจำนวนแตกต่างกันซึ่งยากต่อการจัดการโดยใช้สถิติ ICC ก่อนหน้า โปรดทราบว่า ICC นี้ไม่ใช่ลบเสมอทำให้สามารถตีความได้ว่าเป็นสัดส่วนของความแปรปรวนทั้งหมดที่เป็น“ ระหว่างกลุ่ม” ICC นี้สามารถวางนัยทั่วไปเพื่ออนุญาตให้มีผลกระทบของความแปรปรวนร่วมซึ่งในกรณีนี้ ICC ถูกตีความว่าเป็นการจับภาพความคล้ายคลึงกันภายในระดับเดียวกันของค่าข้อมูลที่ปรับค่า covariate

ที่กล่าวไว้ด้วยข้อมูลอย่างที่คุณได้รับที่นี่ความสัมพันธ์ระหว่างคลาสระหว่างรายการ 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

เราคำนวณ 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

จากนั้นเราสามารถทำเช่นเดียวกันกับการประมาณค่าความแปรปรวนอีกสองค่า:

# 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")

ตอนนี้เราสามารถจำลองความสัมพันธ์ระหว่างไอเท็ม 1 และไอเท็ม 3 ด้วยการสกัดกั้นแบบสุ่มสำหรับครอบครัวเหมือนก่อน แต่ก่อนอื่นน่าจะจำได้ว่าสำหรับการถดถอยเชิงเส้นอย่างง่ายสแควร์รูทของ r-squared ของโมเดลนั้นเหมือนกับสัมประสิทธิ์สหสัมพันธ์ระหว่างคลาส (pearson's r) สำหรับข้อ 1 และข้อ 2

# 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 (ครอบครัว) จำนวนนั้นจะยังคงเป็นบวก เหมือนก่อน:

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 รายการ)
Wolfgang

จากนั้นผมขอแนะนำการดูที่แรกของรายการของคำถามที่เกี่ยวข้อง ที่นี่ คำตอบในโพสต์นี้ดีมากหากสิ่งที่คุณกำลังมองหาในที่สุดคือเก้า ICC ที่แตกต่างกันเท่านั้น
5ayat

ขอขอบคุณอีกครั้ง แต่ก็ยัง - สิ่งที่ให้ ICC ทั้งเก้าได้อย่างไร รูปแบบที่กล่าวถึงนั้นไม่ได้ให้สิ่งนั้น นอกจากนี้ยังเป็นรูปแบบองค์ประกอบความแปรปรวนที่จะไม่อนุญาตสำหรับ ICC เชิงลบ แต่อย่างที่ฉันกล่าวถึงฉันไม่ได้คาดหวังว่า ICC ทั้งหมดจะเป็นค่าบวก
Wolfgang

ฉันไม่คุ้นเคยกับปัญหาการลบ ICC ในรูปแบบเช่นนี้ - ไม่มีข้อ จำกัด เช่นนี้ แต่ในการคำนวณความสัมพันธ์นี้เมื่อคุณดูข้อมูลสรุปของแบบจำลองของคุณด้วยรหัสด้านบนคุณจะมีการประมาณค่าความแปรปรวนสามแบบ ได้แก่ ตระกูลรายการและส่วนที่เหลือ ตัวอย่างเช่นตามที่อธิบายไว้ในโพสต์อื่น ๆ ICC (ครอบครัว) จะเป็น var (ครอบครัว) ^ 2 / (var (ครอบครัว) ^ 2 + var (รายการ) ^ 2) + var (ที่เหลือ) ^ 2) กล่าวอีกนัยหนึ่งความแปรปรวนของผลลัพธ์ของคุณยกกำลังสองกับผลรวมของความแปรปรวน - สแควร์สำหรับเอฟเฟกต์สุ่มสองอันและส่วนที่เหลือ ทำซ้ำเพื่อครอบครัวและไอเท็มรวมกัน 9 รายการ
5ayat

1
ICC ตัวใดตัวหนึ่งใน 9 ตัวที่var(family)^2/(var(family)^2+var(item)^2)+var(residual)^2)สอดคล้องกัน? และใช่ ICCs อาจเป็นลบ ตามที่ฉันอธิบายไว้ในตอนต้นของคำถามของฉันใครสามารถประมาณ ICC โดยตรงกับgls()รูปแบบซึ่งช่วยให้การประมาณการเชิงลบ ในอีกรูปแบบองค์ประกอบความแปรปรวนไม่อนุญาตให้มีการประมาณการเชิงลบ
Wolfgang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.