728x90
반응형
R을 확률을 계산해서 주사위의 확률을 시각화 하기
par(mfrow=c(2,2))
# 2x2로 그림을 나눔
# par = parameters
# mfrow = multi-frame row
dice12 <- sample(1:6, 12, replace = TRUE)
# 1,6까지 숫자중 12번을 무작위로 복원추출해서 변수 dice12에 저장
barplot(table(dice12)/12, ylim=c(0,0.3), main="(a) n=12")
#빈도수를 계산하는 함수 table를 이용해서 빈도를 계산하고 전체 합으로 나눈후 막대 그래프를 그린다.
#ylim은 y축의 범위
abline(b=0, a=1/6, col=2)
#주어진 기울기와 y절편으로 직선을 그리는 함수, 각면이 나올 확률 1/6를 표기
dice120 <- sample(1:6, 120, replace = TRUE)
barplot(table(dice120)/120, ylim=c(0,0.3), main="(b) n=120")
abline(b=0, a=1/6, col=2)
dice1200 <- sample(1:6, 1200, replace = TRUE)
barplot(table(dice1200)/1200, ylim=c(0,0.5), main="(c) n=1,200")
abline(b=0, a=1/6, col=2)
dice12000 <- sample(1:6, 12000, replace = TRUE)
barplot(table(dice12000)/12000, ylim=c(0,0.5), main="(d) n=12,000")
abline(b=0, a=1/6, col=2)
---------------------------------------------
# for문을 활용해서 간결하게 만들면 아래와 같습니다
sample_size <- c(12, 120, 1200, 12000)
# 한 그래픽 창에 2x2 배열로 그래프를 배치
par(mfrow = c(2, 2))
for (i in sample_size) {
c <- sample(1:6, i, replace = TRUE)
barplot(table(c) / i, main = paste("Sample size:", i), xlab = "Value", ylab = "Proportion")
abline(b=0, a=1/6, col=2)
}
# 그래프 창 설정을 원래대로 되돌림
par(mfrow = c(1, 1))
만약 주사위 중에 한번도 안나온 요소를 그래프에 표기 하고 싶다면 아래와 같이 factor을 이용한다.
set.seed(42)
dice12 <- sample(1:6, 12, replace = TRUE)
# Ensure all dice faces (1 through 6) are included in the table
dice12_table <- table(factor(dice12, levels = 1:6))
barplot(dice12_table / 12, ylim = c(0, 1))
abline(h = 1/6, col = 2)
par(mfrow=c(2,2))
par 함수는 R에서 그래픽 장치의 매개변수를 설정하는 데 사용됩니다. 여러 가지 명령어를 사용하여 그래픽 장치의 여러 속성을 조정할 수 있습니다. 몇 가지 주요한 par 명령어는 다음과 같습니다:
mfrow: 그래프를 여러 패널로 배열합니다. 예를 들어, par(mfrow=c(2, 2))는 2x2 패널 그리드로 설정합니다.
mfcol: mfrow와 유사하지만 패널이 열 방향으로 채워집니다.
mar: 마진의 크기를 설정합니다. 마진은 그래프 주변의 여백을 나타냅니다.
oma: 외부 마진의 크기를 설정합니다. 외부 마진은 그래프 바깥쪽 여백을 의미합니다.
pty: 그래프의 종횡비를 조정합니다.
las: 레이블의 방향을 설정합니다.
cex: 문자 크기를 조정합니다.
col: 플롯의 색상을 설정합니다.
pch: 점의 모양을 설정합니다.
xlim, ylim: x축과 y축의 범위를 설정합니다.
등등 다양한 속성을 조정할 수 있습니다. 이러한 명령어를 사용하여 그래픽을 더욱 자세하게 제어할 수 있습니다.
table(dice12)
table() 함수는 R에서 벡터의 빈도수를 계산하여 표로 만드는 함수입니다. 주어진 데이터에서 각각의 값이 나타나는 빈도를 계산하고 그것을 표 형태로 반환합니다.
예를 들어, 다음과 같은 벡터가 있다고 가정합시다:
x <- c("A", "B", "A", "C", "A", "B", "B")
table(x)
#결과
x
A B C
3 3 1
ggplot2
install.packages("ggplot2")
library(ggplot2)
library(magrittr)
# 함수 정의: nn번의 주사위 던지기 시뮬레이션 결과 반환
RDice <- function(nn) {
sample(1:6, nn, replace=TRUE) %>% table() / nn
}
# 난수 생성 시드 설정
set.seed(1234567)
# 주사위 던지기 시뮬레이션 실행
dice_1 <- RDice(12)
dice_2 <- RDice(120)
dice_3 <- RDice(1200)
dice_4 <- RDice(120000)
# 데이터 변환
dice <- c(as.numeric(dice_1), as.numeric(dice_2), as.numeric(dice_3),
as.numeric(dice_4))
nn <- c(rep("(a) n=12", 6), rep("(b) n=120", 6), rep("(c) n=1,200", 6),
rep("(d) n=12,000", 6))
# 데이터 프레임 생성
dice_result <- data.frame(nn, num = rep(1:6, 4), dice)
# ggplot2를 사용하여 결과 시각화
ggplot(data = dice_result, aes(x = num, y = dice)) + # x축은 주사위 눈, y축은 상대 도수
geom_bar(stat = "identity", alpha = 0.8) + # 막대 그래프 생성
xlab("\nResult on Die") + ylab("Relative Frequency\n") + # x축 및 y축 레이블 설정
geom_hline(yintercept = 1/6, colour = 2, lty = 2) + # 기대되는 확률값에 대한 수평선 추가
ylim(0, 0.3) + # y축 범위 설정
facet_wrap(~nn, ncol = 2) # 패널 분할
728x90
반응형
'Statistics > [강의정리] 확률의이해' 카테고리의 다른 글
[확률의이해] 1장 R로하는 도수,상대도수, 도수분포표 (0) | 2024.04.21 |
---|---|
[확률의이해] 1장 확률의 기본 개념연습문제 (0) | 2024.04.21 |
[확률의이해] 1장 확률의 기본 개념 - 1.4 기하학적 확률 (0) | 2024.04.21 |
[확률의이해] 1장 확률의 기본 개념 - 1.3 확률의 상대도수적 정의 (0) | 2024.04.21 |
[확률의이해] 1장 확률의 기본 개념 - 1.2 확률의 개념 (0) | 2024.04.21 |