본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[R 기초] 교차 분석 (논문 작성을 위한 두 번째 분석)

by Vitaminymc 2023. 9. 18.
반응형

교차분석

수집한 설문 결과에 대해서 단일 변수에 대한 빈도분석을 수행한 후, 의미있는 정보를 얻기 위해서는 두 가지 이상의 변수를 결합하여 분석한다.

R / Rstudio

addmargins + table

addmargins() 함수는 행렬 또는 데이터 프레임에 마진(margin)을 추가하는 데 사용되는 함수

마진은 행과 열의 합계 또는 평균, 최대값, 최소값, 중앙값 등을 계산하여 제공

addmargins(table (penguins$species, penguins$island) )  #옵션을 지정하지 않으면, 행과 열의 합계를 출력
  Biscoe Dream Torgersen Sum
Adelie 44 56 52 152
Chinstrap 0 68 0 68
Gentoo 124 0 0 124
Sum 168 124 52 344

addmargins 옵션

addmargins(table (penguins$species, penguins$island), 1 )  #열 기준의  합계만 출력

addmargins(table (penguins$species, penguins$island), 2 )  #행 기준의 합계만 출력
  Biscoe Dream Torgersen
Adelie 44 56 52  
Chinstrap 0 68 0  
Gentoo 124 0 0  
Sum 168 124 52  
         
  Biscoe Dream Torgersen Sum
Adelie 44 56 52 152
Chinstrap 0 68 0 68
Gentoo 124 0 0 124
addmargins(table (penguins$species, penguins$island), ,mean )

# 마진(margin)에 사용할 함수를 지정할 수 있음 (mean, min, max,  median)
  Biscoe Dream Torgersen mean
Adelie 44 56 52 50.66667
Chinstrap 0 68 0 22.66667
Gentoo 124 0 0 41.33333
mean 56 41.33333 17.33333 38.22222

 

300x250

prop.table + table

행렬 또는 데이터 프레임의 행열의 비율을 산출하는 데 사용되는 함수

prop.table (table (penguins$species, penguins$island) )  #전체 데이터셋에 대한 비율을 계산
  Biscoe Dream Torgersen
Adelie 0.127907 0.162791 0.151163
Chinstrap 0 0.197674 0
Gentoo 0.360465 0 0

prop.table 옵션

prop.table(table (penguins$species, penguins$island), 1 )   # 각 행의 합으로 나눈 비율을 계산
  Biscoe Dream Torgersen
Adelie 0.289474 0.368421 0.342105
Chinstrap 0 1 0
Gentoo 1 0 0
prop.table(table (penguins$species, penguins$island), 2 )   # 각 열의 합으로 나눈 비율을 계산
  Biscoe Dream Torgersen
Adelie 0.261905 0.451613 1
Chinstrap 0 0.548387 0
Gentoo 0.738095 0 0

round 함수를 사용하여 소숫점 표시

  • round(x, digits = 0)
  • digits: 반올림할 소수점 자릿수를 지정
  • 기본값은 0으로, 소수점 첫째 자리에서 반올림
  • 양수를 지정하면 해당 소수점 자릿수까지 반올림하고, 음수를 지정하면 해당 자릿수 이전에서 반올림
round (prop.table (table (penguins$species, penguins$island), 1), 2)

#round함수를 사용하여 소수점 세 번째 자리에서 반올림하여 소수점 두 자리의 결과가 표시됨
  Biscoe Dream Torgersen
Adelie 0.29 0.37 0.34
Chinstrap 0.00 1.00 0.00
Gentoo 1.00 0.00 0.00

ceiling()과 floor()

  • ceiling() 함수는 올림을 수행
  • floor() 함수는 버림을 수행
  • ceiling() 함수와 floor() 함수는 소수점 이하의 자릿수를 직접 지정하는 것이 아니라, 정수를 올리거나 내릴 때 사용
  • 이들 함수는 주어진 숫자를 가장 가까운 큰 정수 또는 작은 정수로 반올림하지 않고 그냥 올리거나 내림
test_x <- 3.423
ceiling(test_x) [1] 4
ceiling(test_x * 10) / 10   #3.423 X 10 = 34.23 → 35 → 3.5 [1] 3.5 
ceiling(test_x * 100) / 100  #3.423 X 100 = 342.3 → 343 → 3.43 [1] 3.43
test_x <- 3.457
floor(test_x) [1] 3
floor(test_x * 10) / 10  #3.457 X 10 = 34.57 → 34 → 3.4 [1] 3.4
floor(test_x * 100) / 100  #3.457 X 100 = 345.7 → 345 → 3.45 [1] 3.45

 

 

교차분석 통계량

카이제곱 통계량 (Chi-Square Statistic) : 주로 범주형 변수 간의 관계를 검정하고, 독립성 여부를 판단하기 위해 사용

상관관계 통계량 (Correlation Statistic) : 주로 두 연속형 변수 간의 관계의 강도와 방향을 측정하기 위해 사용

R / Rstudio

아래 카이제곱 검정과 상관계수는 팔머 펭귄 (Palmerpenguins) Dataset을 사용한 단순 예시임 

종(species)과 서식지(island)의 카이제곱 검정

독립변수 : 종(species), 종속변수 : 서식지(island)

귀무가설 : 종별 서식지가 다르지 않다.

대립가설 : 종별 서식지가 다르다

# 두 범주형 변수 X와 Y의 교차 테이블 생성
cross_table <- table(penguins$species, penguins$island)

# 카이제곱 검정 수행
result <- chisq.test(cross_table)

# 결과 출력
print(result)
Pearson's Chi-squared test

data:  cross_table
X-squared = 299.55, df = 4, p-value < 2.2e-16
  • data: cross_table: 검정이 수행된 데이터는 cross_table
  • X-squared = 299.55: 검정 통계량인 카이제곱 통계량(X-squared)의 값은 299.55
  • 관찰된 데이터와 기대값 간의 차이를 나타내며, 큰 값일수록 변수들 간에 연관성이 강하다는 것을 시사
  • df = 4: 자유도(degree of freedom)는 4
  • 자유도는 카이제곱 검정에서 검정 통계량의 분포를 결정하는데 사용되며, 교차 테이블의 크기와 변수 수에 의해 결정
  • p-value < 2.2e-16: p-값(p-value)은 귀무가설(두 변수는 독립이다)의 유의성을 나타내는 값
  • 이 p-값은 거의 0에 가깝기 때문에 매우 낮은 유의수준에서 검정되었음을 나타내며, 귀무가설을 기각하고, 두 변수 간에는 통계적으로 유의한 연관성이 있다고 결론할 수 있음

 

날개 팔 길이 (flipper_length_mm)와 몸무게 (body_mass_g)의 상관 관계

# NA 값을 제거한 데이터프레임 생성
cleaned_data <- na.omit(penguins[c("flipper_length_mm", "body_mass_g")])

# 상관계수 계산
correlation <- cor(cleaned_data$flipper_length_mm, cleaned_data$body_mass_g)

# 결과 출력
print(correlation)
[1] 0.8712018
  • 상관 관계를 산출하기 위한 변수들은 반드시 수치형이어야 함
  • 상관계수의 값이 0.871로, 이 값은 0에서 1 사이의 범위에 있으며, 1에 가까울수록 강한 양의 선형 관계를 나타냄
  • flipper_length_mm이 증가할 때 body_mass_g도 증가하는 경향이 있으며, 두 변수 간의 상관계수가 0.871로 상당히 높기 때문에, 한 변수의 변화가 다른 변수에 영향을 미칠 가능성이 크다고 볼 수 있음
  • 상관계수는 두 변수 간의 선형 관계만을 측정하며, 다른 유형의 관계(비선형 관계 또는 인과 관계)는 측정하지 않음
  • 상관관계는 인과 관계를 나타내지 않으므로 주의해야 함 
  • 변수 간의 상관관계를 더 자세히 이해하려면 그림 그리기나 추가적인 통계 분석을 수행할 필요가 있을 수 있음

 

Palmer penguins

Source : https://allisonhorst.github.io/palmerpenguins/

728x90