논문통계분석/논문통계 이론

박중희 박사, 데이터의 잠재패턴 분석 함수, 응답의 패턴 분석, 박중희

박중희 2024. 6. 27. 16:11

패턴분석 함수 

패턴을 분석하기 위해서 사용하는 함수는 아래처럼 간단히 구성할 수 있다. 

이는 lavaan에서 범주형 변수를 분석하는 함수를 사용하여 간단하게 구성했다. 

latentPattern= function(data, n=2, dim=0L, top=20){
res = as.data.frame( lapply(data, cut, n, labels=FALSE) )%>%
      lavaan::lavTables(dim=dim, categorical = names(data))
  res%>%top_n(res$obs.freq, n= top)
}

 

먼저 데이터를 2개로 구분해보자. 

HS9 <- HolzingerSwineford1939[,c("x1","x2","x3","x4","x5",
                                  "x6","x7","x8","x9")]
 HSbinary <- as.data.frame( lapply(HS9, cut, 2, labels=FALSE) )
 HSbinary

다음의 구조처럼 만들 수 있다. 

 HSbinary %>%head()
  x1 x2 x3 x4 x5 x6 x7 x8 x9
1  1  2  1  1  2  1  1  1  2
2  2  1  1  1  1  1  1  1  2
3  1  1  1  1  1  1  1  1  1
4  2  2  2  1  2  1  1  1  1
5  2  1  1  1  1  1  1  1  1
6  2  1  1  1  1  1  1  2  2

이후에 이에 대한 패턴을 그려낼 수 있다. 

이를 시각화하는 방법과 잠재계층분석과 프로파일 분석에서 추가로 설명하려고 한다. 

lavTables(HSbinary, dim = 0L, categorical = names(HSbinary)) %>%head(20)
     pattern nobs obs.freq obs.prop
1  111111111  301       19    0.063
2  211121111  301       11    0.037
3  111121111  301        7    0.023
4  211111111  301        7    0.023
5  221111111  301        7    0.023
6  221121111  301        7    0.023
7  222221111  301        7    0.023
8  221111211  301        6    0.020
9  221221211  301        6    0.020
10 221222111  301        6    0.020
11 222121111  301        6    0.020
12 111111211  301        5    0.017
13 111221211  301        5    0.017
14 121221211  301        5    0.017
15 122111111  301        5    0.017
16 221221111  301        5    0.017
17 121111111  301        4    0.013
18 211111211  301        4    0.013
19 212111111  301        4    0.013
20 212221111  301        4    0.013

 

이러한 과정을 다음과 같이 할 수 있다. 

latentPattern(HS9)
 latentPattern(HS9)
     pattern nobs obs.freq obs.prop
1  111111111  301       19    0.063
2  211121111  301       11    0.037
3  111121111  301        7    0.023
4  211111111  301        7    0.023
5  221111111  301        7    0.023
6  221121111  301        7    0.023
7  222221111  301        7    0.023
8  221111211  301        6    0.020
9  221221211  301        6    0.020
10 221222111  301        6    0.020
11 222121111  301        6    0.020
12 111111211  301        5    0.017
13 111221211  301        5    0.017
14 121221211  301        5    0.017
15 122111111  301        5    0.017
16 221221111  301        5    0.017
17 121111111  301        4    0.013
18 211111211  301        4    0.013
19 212111111  301        4    0.013
20 212221111  301        4    0.013
21 222221211  301        4    0.013
22 222222111  301        4    0.013
23 222222222  301        4    0.013

 

 

패턴의 시각화 

latentPattern(park516_kor[,1:6], n=5) %>%
ggplot(aes(x= fct_reorder(pattern, desc(obs.freq)), y= obs.freq))+
geom_bar(stat="identity")+theme_bw()+
theme(axis.text.x= element_text(size=14, angle=90))