논문통계분석/논문통계 이론
박중희 박사, 데이터의 잠재패턴 분석 함수, 응답의 패턴 분석, 박중희
박중희
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))