R에서 boxplot()를 만드는 방법 BoxRStudio에서의 그래프

⚡ 스마트 요약

BoxR에서 `geom_boxplot()` 함수(ggplot2 패키지)를 사용하여 숫자 분포를 중앙값, 사분위수, 수염, 이상치로 요약하는 박스 플롯을 작성합니다. 이 가이드에서는 대기질 데이터셋에 박스 플롯을 생성하고 색상, 점, 흔들림, 노치, 그룹 비교 등을 추가하는 방법을 보여줍니다.

  • 📐 5개 수치 요약: 상자는 제1사분위수부터 제3사분위수까지를 나타내고, 선은 중앙값을 표시하며, 수염은 사분위 범위의 1.5배까지 뻗어 있습니다.
  • 🧱 기본 구문: ggplot(df, aes(x = group, y = value)) + geom_boxplot()는 group의 각 레벨마다 하나의 박스를 생성합니다.ping 인자.
  • ???? 이상치 스타일링: outlier.colour, outlier.shape, and outlier.size는 수염 너머의 점이 그려지는 방식을 제어합니다.
  • 💠 관찰 내용 표시: geom_jitter()는 겹치는 부분을 이동시킵니다.ping 상자를 옆으로 돌려 각 상자 뒤에 숨겨진 표본 크기를 확인하세요.
  • 📉 노치 Box입니다 : notch = TRUE로 설정하면 중앙값의 신뢰구간이 그려지며, 겹치지 않습니다.ping 눈금은 실제 차이를 나타냅니다.
  • 🎨 Grouping: 지도ping geom_boxplot() 함수 내부를 채우면 각 범주가 여러 개의 나란히 배치된 상자로 분할됩니다.

BoxR에서 그래프 그리기

R의 boxplot()

R의 boxplot() 사분위수별 데이터 분포를 시각화하고 이상치의 존재를 감지하는 데 도움이 됩니다. ggplot2 라이브러리의 기하학적 객체 geom_boxplot()을 사용하여 R에서 boxplot()을 그릴 수 있습니다.

본 논문에서는 R의 ggplot 라이브러리를 사용하여 박스플롯(boxplot()) 함수를 소개하기 위해 대기질 데이터셋을 활용할 것입니다. 이 데이터셋은 1973년 5월부터 9월까지 뉴욕의 일일 대기질 측정값을 기록하고 있으며, 총 153개의 관측치를 포함합니다. 다음 변수들을 사용할 것입니다.

  • 오존: 수치변수
  • 바람: 수치변수
  • 월: XNUMX월부터 XNUMX월까지. 수치변수

상자를 그리기 전에 상자의 각 부분이 무엇을 나타내는지 정확히 아는 것이 좋습니다.

읽는 방법 Box 그래프: 사분위수, 사분위범위 및 이상치

상자 그림의 각 요소는 5개 요약 통계량의 각 수치를 나타냅니다. 어떤 요소가 무엇을 의미하는지 알면 상자 그림은 단순한 장식이 아닌 분석 도구로 활용될 수 있습니다.

  • 하단 힌지: 제1사분위수(Q1) 아래에 관측치의 25%가 위치합니다.
  • 중앙선: 제2사분위수입니다. 상자 안에서의 위치를 ​​통해 왜곡도를 알 수 있습니다. 선이 아래쪽으로 치우쳐 있으면 데이터가 오른쪽으로 치우쳐 있다는 뜻입니다.
  • 상단 경첩: 제3사분위수(Q3)입니다. 관측치의 75%가 이 값 아래에 있습니다.
  • Box 신장: 사분위 범위(IQR = Q3 – Q1)는 데이터의 중간 절반을 포함하며, 데이터의 분포를 측정하는 표준적이고 견고한 척도입니다.
  • 구레나룻: 이 값들은 가장 극단적인 관측값까지 확장되지만, 여전히 가장 가까운 경첩의 사분위 범위(IQR)의 1.5배 이내에 있습니다. 이 값들은 최소값과 최대값이 아닙니다.
  • 수염 너머의 지점: 1.5 IQR 규칙에 따라 이상치로 표시된 관측값입니다.

두 가지 주의 사항이 있습니다. 첫째, 여기서 "이상치"는 통계적 표시이지 오류가 아닙니다. 오존 농도와 같이 왜곡된 분포에서는 높은 값이 예상되는 현상이므로 삭제해서는 안 됩니다. 둘째, 상자 그림은 분포의 형태를 숨기기 때문에 상자가 동일한 두 그룹이 실제 데이터는 매우 다를 수 있습니다. 아래 그림과 같이 점을 무작위로 이동시키면 이러한 문제를 방지할 수 있습니다.

Box R에서 플롯, 히스토그램, 바이올린 플롯 비교

세 차트 모두 수치 분포를 나타내지만, 각각은 다른 차트가 숨기고 있는 무언가를 드러냅니다.

기준 Box 음모 히스토그램 바이올린 플롯
중앙값, 사분위수, 이상치 각 구간별 빈도 전체 밀도 곡선
Rev여러 개의 봉우리 아니 가능 가능
이상치를 표시합니다 네, 명확하게 시각적으로만 직접적이지 않음
여러 그룹을 비교하기 우수한 어색한 좋은
튜닝 옵션이 필요합니다 아니 네, 빈 개수 네, 대역폭입니다.
ggplot2 객체 geom_boxplot() geom_histogram() geom_violin()

일반적인 절충안은 밀도 분포와 사분위수 요약을 하나의 차트에 담을 수 있도록 바이올린 플롯 안에 좁은 상자 그림을 그리는 것입니다. 자세한 내용은 다음을 참조하십시오. 히스토그램 튜토리얼 비교의 구간화 측면에서.

만들기 Box 음모

R에서 첫 번째 boxplot()을 만들기 전에 다음과 같이 데이터를 조작해야 합니다.

  • 1단계: 데이터 가져오기
  • 2단계: 불필요한 변수 삭제
  • 3단계: 월을 순서형 팩터로 변환합니다.
  • 4단계: 각 월을 시작, 중간, 끝의 세 부분으로 나누는 새로운 범주형 변수를 생성합니다.
  • 5단계: 누락된 관측값 제거

이러한 모든 단계는 dplyr과 파이프라인 연산자 %>%를 사용하여 수행됩니다.

library(dplyr)
library(ggplot2)
# Step 1
data_air <- airquality %>%

#Step 2
select(-c(Solar.R, Temp)) %>%

#Step 3
mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), 
       
#Step 4 
day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))

좋은 방법은 looking() 함수를 사용하여 데이터의 구조를 확인하는 것입니다.

glimpse(data_air)

출력:

## Observations: 153
## Variables: 5
## $ Ozone   <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ...
## $ Wind    <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6...
## $ Month   <ord> May, May, May, May, May, May, May, May, May, May, May,...
## $ Day     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...

Ozone과 Solar.R 모두에 NA 값이 포함되어 있습니다. geom_boxplot() 함수는 이러한 값을 자동으로 삭제하고 경고 메시지를 출력하므로, 명시적으로 제거하는 것이 더 깔끔합니다.

# Step 5
data_air_nona <-data_air %>% na.omit()	

기본 상자 그림

이제 월별 오존 분포를 그래프로 나타내시오.

# Store the graph
box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone))
# Add the geometric object box plot
box_plot +
    geom_boxplot()

Code 설명

  • 나중에 사용할 수 있도록 그래프를 저장하세요.
    • 박스플롯: 기본 플롯은 박스플롯 객체에 저장되므로 전체 호출을 반복하지 않고도 나중에 레이어를 추가할 수 있습니다.
  • 기하학적 객체를 추가합니다.
    • ggplot boxplot에 data_air_nona 데이터 세트를 전달합니다.
    • aes() 인수 내에 x축과 y축을 추가합니다.
    • + 기호는 R이 코드를 계속 읽기를 원한다는 것을 의미합니다. 코드를 쪼개서 더 읽기 쉽게 만듭니다.
    • geom_boxplot()를 사용하여 상자 그림을 만듭니다.

출력:

Basic Box 음모

그래프의 측면 변경

그래프의 측면을 뒤집을 수 있습니다.

box_plot +
  geom_boxplot()+
  coord_flip()

Code 설명

  • box_plot: 저장한 그래프를 사용합니다. 그래프에 새 정보를 추가할 때마다 모든 코드를 다시 쓸 필요가 없습니다.
  • geom_boxplot(): 상자와 수염을 그립니다.
  • coord_flip(): 그래프의 측면을 뒤집습니다.

출력:

그래프의 측면 변경

이상치 색상 변경

이상치의 색상, 모양 및 크기를 변경할 수 있습니다.

box_plot +
    geom_boxplot(outlier.colour = "red",
        outlier.shape = 2,
        outlier.size = 3) +
    theme_classic()

Code 설명

  • outlier.colour=”red”: 이상치의 색상을 제어합니다.
  • outlier.shape=2: 이상치의 모양을 변경합니다. 2는 삼각형을 가리킨다.
  • outlier.size=3: 삼각형의 크기를 변경합니다. 숫자가 클수록 마커가 더 크게 그려집니다.

출력:

이상치 색상 변경

요약 통계 추가

상자 그림 자체에는 표시되지 않는 그룹 평균과 같은 요약 통계를 겹쳐서 표시할 수 있습니다.

box_plot +
    geom_boxplot() +
    stat_summary(fun.y = mean,
        geom = "point",
        size = 3,
        color = "steelblue") +
    theme_classic()

Code 설명

  • stat_summary() 함수는 계산된 통계량을 상자 그림 위에 추가합니다.
  • `fun` 인수는 반환할 통계량을 제어합니다. 여기서는 평균입니다. 이전 코드에서는 `fun.y`를 사용했는데, ggplot2는 버전 3.3.0부터 `fun.y`를 더 이상 사용하지 않도록 권장하고 있습니다.
  • 참고: 최소 및 최대와 같은 다른 통계도 사용할 수 있습니다. 동일한 그래프에 두 개 이상의 통계가 표시될 수 있습니다.
  • geom = “point”: 점으로 평균을 표시합니다.
  • size=3: 포인트의 크기
  • color =”steelblue”: 포인트 색상

출력:

요약 통계 추가

Box 점으로 플롯

다음으로, 상자 위에 점 그래프 레이어를 추가합니다. 각 점은 하나의 관측값을 나타내므로 각 상자 뒤에 있는 표본 크기를 확인할 수 있습니다.

box_plot +
    geom_boxplot() +
    geom_dotplot(binaxis = 'y',
        dotsize = 1,
        stackdir = 'center') +
    theme_classic()

Code 설명

  • geom_dotplot() 함수는 각 관측치마다 하나의 점을 그리고, 각 빈(bin) 내에 점들을 쌓아서 표시합니다.
  • binaxis='y': y축을 따라 점의 위치를 ​​변경합니다. 기본적으로 x축
  • dotsize=1: 점의 크기
  • stackdir='center': 점을 쌓는 방법: 네 가지 값:
    • "위로"(기본값),
    • "아래에"
    • "센터"
    • “중앙 전체”

출력:

Box 점으로 플롯

제어 미학 Box 음모

상자의 색상을 변경합니다

그룹의 색상을 변경할 수 있습니다.

ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
    geom_boxplot() +
    theme_classic()

Code 설명

  • 그룹의 색상은 aes() 맵에서 제어됩니다.pingcolor=Month 속성을 사용하면 월별로 상자 그림의 색상을 변경할 수 있습니다.

출력:

색상 변경 Box

Box 여러 그룹으로 플롯

여러 그룹을 추가하는 것도 가능합니다. 측정일에 따른 공기질의 차이를 시각화할 수 있습니다.

ggplot(data_air_nona, aes(Month, Ozone)) +
    geom_boxplot(aes(fill = day_cat)) +
    theme_classic()

Code 설명

  • aes() 맵ping 기하학적 객체의 속성은 표시할 그룹을 제어합니다(이 변수는 팩터여야 합니다).
  • aes(fill= day_cat)를 사용하면 x축에 각 달에 대한 세 개의 상자를 만들 수 있습니다.

출력:

Box 여러 그룹으로 플롯

Box 지터링된 점이 있는 플롯

개별 관측값을 나타내는 또 다른 방법은 점들을 무작위로 이동시키는 것입니다. 점 이동은 범주형 x축으로 인해 많은 점들이 동일한 위치에 나타날 때 일반적으로 사용되는 방법입니다.

이 방법은 중복을 방지합니다.ping 이산 데이터의 경우.

box_plot +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(width = 0.21)) +
    theme_classic()

Code 설명

  • geom_jitter()는 각 점에 작은 무작위 변위를 추가하여 겹침 현상을 방지합니다.ping 값이 드러납니다.
  • shape=15는 점의 모양을 변경합니다. 15는 정사각형을 나타냅니다.
  • color = “steelblue”: 포인트의 색상을 변경합니다.
  • position = position_jitter(width = 0.21): x축 단위로 측정되는 점들의 측면 이동 거리를 제어합니다. 기본값은 범주 간 간격의 40%입니다.

출력:

Box 지터링된 점이 있는 플롯

지터 방식을 적용한 첫 번째 그래프와 포인트 방식을 적용한 두 번째 그래프의 차이점을 확인할 수 있습니다.

box_plot +
    geom_boxplot() +
    geom_point(shape = 5,
        color = "steelblue") +
    theme_classic()

Box 지터링된 점이 있는 플롯

노치 Box 음모

geom_boxplot()의 흥미로운 기능은 R의 노치 박스 플롯 함수입니다. 노치 플롯은 중앙값 주위로 상자를 좁힙니다. 노치 박스 플롯의 주요 목적은 그룹 간 중앙값의 유의성을 비교하는 것입니다. 노치가 겹치지 않을 때 두 그룹의 중앙값이 다르다는 강력한 증거가 있습니다. 노치는 다음과 같이 계산됩니다.

노치 Box 음모

여기서 IQR은 사분위 범위이고 n은 그룹 내 관측치 수입니다. 해당 표시는 중앙값의 95% 신뢰 구간을 대략적으로 나타냅니다.

box_plot +
    geom_boxplot(notch = TRUE) +
    theme_classic()

Code 설명

  • geom_boxplot(notch = TRUE): 중앙값 주변에 홈이 있는 상자 그림을 그립니다.

출력:

노치 Box 음모

제목, 레이블 및 사용자 지정 색상을 추가하는 방법 Box R에서 그래프 그리기

위 그래프는 ggplot2의 기본 설정을 사용하는데, 이 설정은 데이터 프레임에서 변수 이름을 그대로 가져옵니다. 출판 가능한 차트를 위해서는 읽기 쉬운 레이블과 의도적으로 선택된 색상 팔레트가 필요합니다.

제목 및 축 레이블. labs() 함수 호출 한 번으로 모든 텍스트 요소가 설정됩니다.

box_plot +
    geom_boxplot(fill = "coral", alpha = 0.7) +
    labs(title = "Ozone concentration by month",
        subtitle = "New York, May to September 1973",
        x = "Month",
        y = "Ozone (parts per billion)",
        caption = "Source: airquality dataset") +
    theme_classic()

원하는 색상을 직접 선택하세요. fill이 aes() 함수 내부에 매핑될 때는 scale_fill_manual()을 사용하고, colour가 aes() 함수 내부에 매핑될 때는 scale_colour_manual()을 사용하십시오.

ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) +
    geom_boxplot() +
    scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) +
    theme_classic() +
    theme(legend.position = "none")

여기서는 범례를 표시하지 않았습니다. x축에 이미 각 월의 이름이 표시되어 있으므로, 이를 반복하면 공간 낭비가 되기 때문입니다.

상자들을 다시 정렬합니다. 요인 수준이 축의 순서를 결정합니다. '월'은 순서가 있는 요인으로 생성되었기 때문에 이미 시간 순서대로 표시됩니다. 순서가 없는 요인의 경우 중앙값을 기준으로 정렬하세요.

ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) +
    geom_boxplot() +
    theme_classic()

차트를 저장하는 중입니다. ggsave() 함수는 사용자가 지정한 해상도로 마지막 그래프를 디스크에 저장합니다.

ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)

Box R에서 그래프 그리기: Code 참조

아래 표는 위에서 설명한 각 상자 그림 변형에 대한 ggplot2 호출을 나열합니다.

목표 Code
기본 상자 그림
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
화면 방향을 바꾸세요
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
노치 박스 플롯
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box 지터된 점이 있는 플롯
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
그룹별 색상
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
카테고리별 여러 그룹
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
그룹 평균을 더합니다.
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

또한 확인:- 초보자를 위한 R 튜토리얼: R 프로그래밍 언어 배우기

자주 묻는 질문

수염은 가장 가까운 사분위수의 사분위 범위의 1.5배 이내에 있는 가장 극단적인 관측값에 도달합니다. 이 수염은 최솟값과 최댓값이 아니며, 이 수염을 벗어나는 모든 값은 이상치로 표시됩니다.

자동으로 그렇지 않습니다. 1.5 IQR 규칙은 관례일 뿐 오류를 증명하는 것은 아닙니다. 각 지점을 먼저 조사해야 합니다. 오존 측정값과 같이 왜곡된 데이터는 실제 측정값임에도 불구하고 자연스럽게 높은 값을 나타낼 수 있습니다.

중복ping 표의 홈은 두 중앙값이 다르다는 강력한 증거가 없음을 시사합니다. 겹치지 않음ping 눈금은 실제 차이가 있을 가능성을 나타내며, 대략 95% 신뢰도에 해당하는 비교 결과입니다.

Box 그래프는 학습 전에 수행하는 표준적인 탐색 단계로, 데이터의 왜곡, 이상치, 클래스별 특징 변수의 크기 차이 등을 파악하는 데 도움이 됩니다. 또한, 연구팀은 그래프를 활용하여 교차 검증 폴드별 모델 정확도를 비교합니다.

예. AI 비서는 연속적인 x축이 단일 상자를 생성하는 것과 같은 오류를 설명하고 적절한 aes() 맵을 제안할 수 있습니다.pingfun.y와 같이 더 이상 사용되지 않는 인수를 표시하세요. 수정된 코드는 항상 자신의 데이터로 다시 실행하세요.

이 게시물을 요약하면 다음과 같습니다.