R의 패키지는 분석 함수뿐 아니라 예제 데이터도 포함하는 경우가 많다. 이 데이터를 패키지 데이터셋이라고 한다. 보통 R을 시작하면 datasets라고 하는 패키지가 자동으로 로드되는데 이 패키지는 기본적인 예제 데이터셋만을 포함하고 있는 패키지이다.Nile 데이터셋은 이 패키지에 포함되어 있기 때문에 Nile이라는 명령어로 바로 불러올 수 있다.
Nile 데이터셋은 1871년부터 1970년까지 아스완에서의 나일강의 연간 유량 흐름을 측정한 시계열자료이다. 자료는 다음과 같다.
Nile
## Time Series:
## Start = 1871
## End = 1970
## Frequency = 1
## [1] 1120 1160 963 1210 1160 1160 813 1230 1370 1140 995 935 1110 994 1020
## [16] 960 1180 799 958 1140 1100 1210 1150 1250 1260 1220 1030 1100 774 840
## [31] 874 694 940 833 701 916 692 1020 1050 969 831 726 456 824 702
## [46] 1120 1100 832 764 821 768 845 864 862 698 845 744 796 1040 759
## [61] 781 865 845 944 984 897 822 1010 771 676 649 846 812 742 801
## [76] 1040 860 874 848 890 744 749 838 1050 918 986 797 923 975 815
## [91] 1020 906 901 1170 912 746 919 718 714 740
먼저, summary를 통해 Nile 데이터의 기초통계량을 확인할 수 있다. 최소값은 456, 중앙값은 893.5, 평균은 919.4, 최대값은 1370이다.
summary(Nile)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 456.0 798.5 893.5 919.4 1032.5 1370.0
stem()이라는 명령어로 위 데이터의 줄기잎그림을 그릴 수 있다. 줄기잎그림(stem-and-leaf plot)은 소규모 자료의 분포적 특성을 살펴보기 위하여 작성되는 그래프이다. 결과는 다음과 같다.
stem(Nile)
##
## The decimal point is 2 digit(s) to the right of the |
##
## 4 | 6
## 5 |
## 6 | 5899
## 7 | 000123444455667778
## 8 | 000011222233344555556667779
## 9 | 0011222244466678899
## 10 | 0122234455
## 11 | 00012244566678
## 12 | 112356
## 13 | 7
위의 줄기잎그림에서 줄기는 백의 자리수를, 잎은 십의 자리수를 나타낸다. 각 줄기 내에서 잎들은 크기순으로 정렬되어 있으며 각 잎들은 같은 너비(width)를 가지기 때문에 자료의 분포를 비교하기에 용이하다. 줄기잎그림은 자료의 분포를 시각화한다는 점에서 히스토그램과 비슷하지만 정보의 보전 면에서 유리하고 또한 쉽게 구간(줄기) 수를 늘이거나 줄일 수 있다.
우리는 줄기잎그림을 통해 다음과 같은 자료의 특성을 관찰할 수 있다.
군집(cluster)의 수
위 그림의 주요 특징은 이봉분포의 모습을 보인다는 점이다. 이것은 자료가 2개의 군집으로 되어있음을 말한다. 800대의 주 군집과 1100대의 딸린 군집이 혼합된 형태를 보인다. 각 군집이 어떤 속성과 관련이 있는가를 밝혀보는 작업이 필요해 보인다.
대칭성 여부
줄기잎그림을 통해 대칭성 여부를 눈으로 확인할 수 있다. 위 그림에서는 800대의 중간 부분에서 가장 높은 빈도를 보이고 양 극단으로 갈수록 빈도 수가 줄어드는 것을 확인할 수 있다. 하지만 위에서 언급했듯이 이봉분포의 형태를 띠고 있기 때문에 대칭적이라고 보기는 힘들다.
자료의 범위 및 산포
자료의 범위 및 산포 역시 쉽게 확인할 수 있다. 자료의 범위는 460부터 1370까지이다.(그림에서 판단할 수 있는 자료의 범위는 460~1370이지만 summary를 확인해보면 원래 자료의 범위는 456~1370이다. 이는 원 자료가 줄기잎그림으로 표현될 때 값들이 일의 자리에서 반올림하여 그려졌기 때문이다.) 하지만 500대에서 자료의 공백이 있기 때문에 400대의 자료를 특이값으로 처리할지에 대한 판단이 필요하다. 또한 산포의 척도는 주로 분산이나 표준편차인데 이를 구하지 않고 눈으로 산포의 정도를 비교할 수 있다. 두 개의 자료에 대한 줄기잎그림을 옆에 놓고 비교한다면 좋을 것이다.
특이값(outlier)의 존재여부
자료의 범위를 확인할 때 언급했듯이 500대에서 자료의 공백이 있고 400대의 값 하나(위의 summary를 통해 이 값이 456임을 확인했다.)가 동떨어져 있는 것을 확인할 수 있다. 한눈에 특이값의 여부를 찾을 수 있다. 전반적인 경향성을 확인하기 위해 456의 값을 특이값으로 간주하여 제외한 뒤 줄기잎그림을 다시 그릴 수 있다. 그 결과는 아래와 같다. 물론 특이값은 함부로 제거해서는 안되며 다양한 근거를 통해 신중하게 처리해야 할 것이다.
stem(Nile[Nile != 456])
##
## The decimal point is 2 digit(s) to the right of the |
##
## 6 | 5899
## 7 | 000123444455667778
## 8 | 000011222233344555556667779
## 9 | 0011222244466678899
## 10 | 0122234455
## 11 | 00012244566678
## 12 | 112356
## 13 | 7
warpbreaks 자료를 이용하여 wool A, B 각기 따로 breaks의 stem and leaf display 그리고 분포의 특징에 대하여 비교 설명하여라.R의 패키지는 분석 함수뿐 아니라 예제 데이터도 포함하는 경우가 많다. 이 데이터를 패키지 데이터셋이라고 한다. 보통 R을 시작하면 datasets라고 하는 패키지가 자동으로 로드되는데 이 패키지는 기본적인 예제 데이터셋만을 포함하고 있는 패키지이다.warpbreaks 데이터셋은 이 패키지에 포함되어 있기 때문에 warpbreaks이라는 명령어로 바로 불러올 수 있다.
warpbreaks 데이터셋에 대한 설명은 ?warpbreask라는 명령어를 통해 확인할 수 있다.
먼저, wool의 값이 A인 경우와 B인 경우인 경우를 나누어준다. []를 사용하여 각각의 경우를 기존 데이터프레임으로부터 인덱싱할 수 있으며 이를 각각 A와 B라는 변수에 저장한다.
A = warpbreaks[warpbreaks$wool=="A",]
B = warpbreaks[warpbreaks$wool=="B",]
줄기잎그림을 그리기 전에 각각의 정보에 대한 summary를 진행한다. 자료분석의 대상이 되는 정보는 각 자료의 breaks값이다. 아래의 summary결과에서 가장 눈에 띄는 정보는 두 자료의 최대값이 차이가 많이 난다는 점이다. A자료의 breaks값의 최대값은 70인 반면, B자료의 breaks값의 최대값은 44이다. 최소값, 제1분위수, 중앙값에서는 두 자료의 값이 크게 차이가 나지 않지만 제3분위수 이후부터 값의 차이가 발생하는 것을 확인할 수 있다.
summary(A$breaks)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.00 19.50 26.00 31.04 36.00 70.00
summary(B$breaks)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 13.00 18.00 24.00 25.26 29.00 44.00
본격적으로 줄기잎그림을 그리기 전에 두 자료의 개수가 동일한지를 확인하겠다. 두 개의 줄기잎그림을 비교할 때 자료의 개수가 크게 차이난다면 비교를 올바르게 진행할 수 없다. 확인 결과 두 자료의 개수는 동일하다.
length(A$breaks)==length(B$breaks)
## [1] TRUE
A와 B를 나누어주고 각각의 정보를 확인했으니 이제 stem()을 통해 각각의 줄기잎그림을 그려준다. 역시 그림의 대상이 되는 열은 breaks이다.
stem(A$breaks)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 1 | 0257888
## 2 | 114566689
## 3 | 00566
## 4 | 3
## 5 | 124
## 6 | 7
## 7 | 0
stem(B$breaks)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 1 | 34
## 1 | 5566799
## 2 | 00114
## 2 | 6788999
## 3 | 1
## 3 | 99
## 4 | 124
위의 두 그림을 비교하려고 했는데 자세히 살펴보니 두 그림의 줄기가 다르다. A의 줄기잎그림의 줄기는 1,2,3,4,5,6,7이고 B의 줄기잎그림의 줄기는 1,1,2,2,3,3,4이다. 줄기의 수를 줄이거나 늘림으로써 가장 보기 좋은 모양의 줄기 그림을 얻을 수 있는 것은 줄기잎그림의 큰 장점 중 하나이지만 이렇게 두 자료를 비교하기 위해서는 기준이 되는 줄기를 통일시켜줄 필요가 있다. 적절한 줄기 수를 정하는 최적 공식은 존재하지 않기 때문에 시행착오를 통해 여러 개의 줄기 그림을 그리고 자료 특성이 어떻게 다르게 보이는지를 살펴보는 것이 좋다.
먼저 B의 줄기를 기준으로 하자. 이를 위해서는 A의 줄기 수를 두 배로 늘려주어야한다.
이 때, scale을 사용하여 줄기 수를 조절할 수 있다. A의 줄기 수를 두 배로 늘려준다. 결과는 다음과 같다.
stem(A$breaks, scale=2)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 1 | 02
## 1 | 57888
## 2 | 114
## 2 | 566689
## 3 | 00
## 3 | 566
## 4 | 3
## 4 |
## 5 | 124
## 5 |
## 6 |
## 6 | 7
## 7 | 0
stem(B$breaks)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 1 | 34
## 1 | 5566799
## 2 | 00114
## 2 | 6788999
## 3 | 1
## 3 | 99
## 4 | 124
일반적으로 줄기 수를 늘이면 늘일수록 많은 수의 봉우리를 보게 되고, 그 반대로 줄기 수를 줄이면 줄일수록 적은 수의 봉우리를 보게 된다. 위에서는 A의 줄기 수를 늘려서 표현했다. 두 자료의 줄기를 같게 만들어주었으므로 이제 비교가 가능하다.
반면 A의 줄기를 기준으로 하여 B의 줄기 수를 조절하는 방법도 가능하다. B의 줄기 수를 반으로 줄여준다. 결과는 다음과 같다.
stem(A$breaks)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 1 | 0257888
## 2 | 114566689
## 3 | 00566
## 4 | 3
## 5 | 124
## 6 | 7
## 7 | 0
stem(B$breaks, scale=0.5)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 1 | 345566799
## 2 | 001146788999
## 3 | 199
## 4 | 124
전자의 방식에서는 A의 줄기 수가 너무 많아져 자료의 공백이 불필요하게 많아지는 등 자료의 분포를 올바르게 나타내기 힘들다고 판단하여 후자의 방식으로 두 개의 자료를 비교한다.
군집(cluster)의 수
A와 B 모두에서 20대에서 가장 많은 빈도가 발생했다. 20대의 값을 중심으로 하는 하나의 큰 군집으로 생각해도 좋을 것이다. 이는 두 자료 모두에서 공통으로 나타나는 현상이다.
대칭성 여부
두 자료 모두 대칭적인 분포라고 말하기는 어렵다. 20대의 줄기를 중심으로 자료의 분포가 이어지지만 두 자료 모두 오른쪽으로 길게 늘어진 형태의 분포를 가진다.
자료의 범위 및 산포
두 자료의 범위는 상당히 다르다. 줄기의 수에서 확인할 수 있듯이 A의 줄기는 7까지 표현되지만 B의 줄기는 4에서 끊긴다. 위에서 언급했듯이 두 자료의 수는 같다. 자료의 수는 같은데 범위가 다르니 산포의 정도도 다르다. 작은 값에서의 분포는 비슷하지만 큰 값의 분포에서는 A의 꼬리가 훨씬 길게 늘어짐을 눈으로 확인할 수 있다.
특이값(outlier)의 존재여부
두 자료 모두에서 특별히 특이값이라고 생각할만한 자료의 값은 보이지 않는다.
종합하면 A유형의 wool로 만든 실이 끊어지는 횟수는 B유형의 그것보다 분산이 크다. B유형의 wool로 만든 실이 끊어지는 횟수는 10대에서 40대의 값으로 비교적 예측가능한데 비해, A유형의 wool로 만든 실이 끊어지는 횟수는 범위가 10대에서 70대로 넓어 B에 비해 예측불가능하다.
Seatbelts 데이터는 다음의 열들을 갖는 시계열자료이다. 데이터셋에 대한 설명은 ?Seatbelts라는 명령어를 통해 확인할 수 있다.
위의 자료에서 사망운전자수 정보를 비교하고 싶은데 Driverskilled의 값을 그대로 가져다쓰면 문제가 발생한다. 운전자가 많을수록 사망운전자수는 증가할 것이다. 마찬가지로 운행거리가 증가할수록 사망운전자수도 증가할 것이다. 각 월마다 운전자수와 운행거리가 다르므로 각각의 Driverskilled값을 운전자 수와 운행거리에 대해 스케일링을 해주어야한다. 문제에서 제시한대로 운전자 1000명, 운행거리 10000km를 기준으로 Driverskilled의 조정된 값을 계산해주는 식은 다음과 같다. \[
Driverskilled(scaled) = Driverskilled \times {1000 \over drivers} \times {10000 \over kms}
\] 위 수식을 계산하여 killed라는 변수에 저장한다.
killed = Seatbelts[,1] * 1000/Seatbelts[,2] * 10000/Seatbelts[,5]
그런데 한가지 확인해야할 것이 있다. 위 식에서 운전자수와 운행거리에 대해 사망자수를 동시에 스케일링을 해주었는데 만약 운전자수와 운행거리가 높은 양의 상관관계를 갖는다면 이것은 중복으로 스케일링을 해준 것이 된다. 따라서 운전자수와 운행거리의 상관관계를 살펴볼 필요가 있다. 상관관계는 산점도를 통해 간단히 확인할 수 있으며 아래의 그림을 살펴보면 둘의 상관관계는 크지 않으며 눈에 띄는 선형성이 없음을 확인할 수 있다.
plot(Seatbelts[,2], Seatbelts[,5], main="scatterplot of drivers and kms", xlab="drivers", ylab="kms")
최종적으로 산출된 killed의 값들은 다음과 같다.
killed
## Jan Feb Mar Apr May Jun Jul Aug
## 1969 70.01457 83.70020 67.93550 57.33992 61.67357 56.61546 52.42054 46.26871
## 1970 78.14571 84.98901 58.24112 60.99744 50.64810 56.49568 47.52108 48.01465
## 1971 64.29949 63.47320 53.29176 58.69939 64.01752 64.95914 45.10956 47.75921
## 1972 70.76026 76.68027 50.23071 60.80931 57.95145 59.75852 41.47709 43.95444
## 1973 58.73206 67.12026 47.28775 46.92740 52.38477 49.50957 45.17271 42.36880
## 1974 60.49727 61.55958 53.56853 54.78109 48.35821 49.62198 47.73407 40.82561
## 1975 68.77241 61.14510 56.04435 52.80454 42.11894 49.88698 48.15842 40.63729
## 1976 56.86658 64.38762 65.72576 50.21949 39.84583 54.88582 44.36589 47.50599
## 1977 56.76676 46.88086 41.41296 63.54978 50.68025 42.68516 46.36679 35.43020
## 1978 61.08390 65.40609 49.40833 53.13544 41.74844 38.71071 44.89731 40.47339
## 1979 56.16221 53.73970 49.34098 52.27253 42.30372 45.87022 45.82303 41.36014
## 1980 49.24009 48.21220 37.81429 44.33489 36.08874 42.67402 38.17860 34.61098
## 1981 49.45836 48.68894 37.72636 35.49843 34.03551 43.17574 40.17920 37.10761
## 1982 58.07185 45.93880 51.83346 43.68423 37.27839 39.34782 39.66966 34.43277
## 1983 49.48634 57.94405 44.84477 42.82506 34.54467 43.16551 24.34030 35.61889
## 1984 41.78785 44.28299 34.08087 38.29934 34.25136 38.02031 30.08848 34.57244
## Sep Oct Nov Dec
## 1969 55.97589 71.28450 69.46161 90.42720
## 1970 55.01666 75.73164 70.82507 71.37846
## 1971 60.76568 55.21339 73.03030 60.28602
## 1972 44.21439 63.57699 57.35484 62.04106
## 1973 48.96082 57.91570 56.50407 60.64214
## 1974 48.82536 53.90041 59.50825 63.23475
## 1975 57.21512 51.77971 64.52438 56.51057
## 1976 43.08701 50.15173 60.00739 58.06986
## 1977 39.46887 55.50541 60.55490 59.68683
## 1978 41.29861 45.17894 50.61658 57.33019
## 1979 40.67067 47.22622 49.34516 51.10530
## 1980 47.57382 41.65117 41.94639 44.82546
## 1981 43.14842 44.06775 43.48598 42.34942
## 1982 41.28841 39.66898 41.19100 44.17381
## 1983 42.21286 44.04073 46.99822 47.00786
## 1984 41.83587 38.23288 42.48633 48.12998
위에서 계산된 killed의 분포를 한눈에 보기 위해 stem()으로 줄기잎그림을 그릴 수 있다.
summary(killed)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 24.34 42.46 49.10 50.87 57.98 90.43
stem(killed)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 2 | 4
## 2 |
## 3 | 04444
## 3 | 555556677888888999
## 4 | 000001111111112222222222233333333444444444
## 4 | 555555666667777778888888888999999999
## 5 | 000000111122222333444
## 5 | 55556666677777777788888899
## 6 | 00000011111112223344444
## 6 | 55567899
## 7 | 011113
## 7 | 678
## 8 | 4
## 8 | 5
## 9 | 0
위의 줄기잎그림에서 줄기는 십의 자리수를, 잎은 일의 자리수를 나타낸다.
군집(cluster)의 수
위 그림의 주요 특징은 이봉분포의 모습을 보인다는 점이다. 이것은 자료가 2개의 군집으로 되어있음을 말한다. 40대 초반의 주 군집과 50대 후반대의 딸린 군집이 혼합된 형태를 보인다. 각 군집이 어떤 속성과 관련이 있는가를 밝혀보는 작업이 필요해 보인다.
대칭성 여부
줄기잎그림을 통해 대칭성 여부를 눈으로 확인할 수 있다. 40대의 줄기에서 가장 높은 빈도를 보이고 양 극단으로 갈수록 빈도 수가 줄어드는 것을 확인할 수 있는데 오른쪽으로 길게 뻗어있는 모양이다. 하지만 위에서 언급했듯이 이봉분포의 형태를 띠고 있기 때문에 대칭적이라고 보기는 힘들다.
자료의 범위 및 산포
자료의 범위 및 산포 역시 쉽게 확인할 수 있다. 자료의 범위는 24부터 90까지이다.(그림에서 판단할 수 있는 자료의 범위는 24~90이지만 summary를 확인해보면 정확한 자료의 범위는 24.34~90.43이다.)
특이값(outlier)의 존재여부
20대 후반의 줄기에서 자료의 공백이 있고 20 초반대의 값 하나(위의 summary를 통해 이 값이 24.34임을 확인했다.)가 동떨어져 있는 것을 확인할 수 있다. 한눈에 특이값의 여부를 찾을 수 있다. 특이값은 함부로 제거해서는 안되며 다양한 근거를 통해 신중하게 처리해야 할 것이다.
안전띠 법의 시행여부는 8번째 열에 0과 1로 표기되어있다. 0은 시행 전, 1은 시행 후를 나타낸다. 8번째 열을 나타내면 다음과 같다. 1983년 2월부터 안전띠 법이 시행되었음을 확인할 수 있다. 우리는 이에 따른 사망운전자수를 확인해야하기 때문에 8번째 열의 자료를 통해 1번째 열의 자료를 인덱싱해주어야한다. sum(Seatbelts[,8]==0)을 통해 169번째까지의 값은 0, 170번째부터의 값은 1임을 확인할 수 있다.
Seatbelts[,8]
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1969 0 0 0 0 0 0 0 0 0 0 0 0
## 1970 0 0 0 0 0 0 0 0 0 0 0 0
## 1971 0 0 0 0 0 0 0 0 0 0 0 0
## 1972 0 0 0 0 0 0 0 0 0 0 0 0
## 1973 0 0 0 0 0 0 0 0 0 0 0 0
## 1974 0 0 0 0 0 0 0 0 0 0 0 0
## 1975 0 0 0 0 0 0 0 0 0 0 0 0
## 1976 0 0 0 0 0 0 0 0 0 0 0 0
## 1977 0 0 0 0 0 0 0 0 0 0 0 0
## 1978 0 0 0 0 0 0 0 0 0 0 0 0
## 1979 0 0 0 0 0 0 0 0 0 0 0 0
## 1980 0 0 0 0 0 0 0 0 0 0 0 0
## 1981 0 0 0 0 0 0 0 0 0 0 0 0
## 1982 0 0 0 0 0 0 0 0 0 0 0 0
## 1983 0 1 1 1 1 1 1 1 1 1 1 1
## 1984 1 1 1 1 1 1 1 1 1 1 1 1
sum(Seatbelts[,8]==0)
## [1] 169
sum(Seatbelts[,8]==1)
## [1] 23
length(Seatbelts[,8])
## [1] 192
안전띠 법 시행 전과 후를 나누어 각각의 다른 변수 a와 b에 저장해준다. 위에서 확인한 바와 같이 자료의 169번째까지의 값은 안전띠 법 시행 전의 자료, 170번째부터의 값은 안전띠 법 시행 이후의 자료이다. 이 정보를 활용해 다음과 같이 사망운전자수(killed)의 자료를 나누어준다. 그리고 각각의 줄기잎그림을 그려준다. 다만 자료의 수가 너무 차이가 많이 나기 때문에 안전띠 법 시행 이후의 자료에 대해서는 scale=2를 통해 줄기의 수를 2배로 늘려준다. 결과는 다음과 같다.
a = killed[1:169]
b = killed[170:192]
summary(a)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 34.04 43.95 50.22 52.29 59.51 90.43
summary(b)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 24.34 35.10 41.84 40.42 44.16 57.94
stem(a, scale=1)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 3 | 44
## 3 | 555677888999
## 4 | 0000011111111122222223333334444444
## 4 | 55555666667777888888888999999999
## 5 | 000000111122222333444
## 5 | 5555666667777777778888899
## 6 | 00000011111112223344444
## 6 | 55567899
## 7 | 011113
## 7 | 678
## 8 | 4
## 8 | 5
## 9 | 0
stem(b, scale=2)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 2 | 4
## 2 |
## 3 | 044
## 3 | 556888
## 4 | 22223344
## 4 | 5778
## 5 |
## 5 | 8
위의 두 줄기잎그림을 살펴보면 일단 두 자료의 수가 굉장히 차이가 많이 남을 확인할 수 있다. 따라서 절대적인 기둥의 높이를 살피기보다는 자료의 분포와 모양으로 비교를 해야한다. 먼저 각각의 최대최소값을 비교해보자. 최대값이 전자에서는 90, 후자에서는 58임을 확인할 수 있다. 최소값은 각각 34, 24이다. 즉 안전띠 법 시행 이전의 사망자수 범위는 34~90이며 시행 이후의 사망자수의 범위는 24~58이다. 이를 통해 안전띠 법 시행 이후의 사망운전자수 분포가 전체적으로 왼쪽으로(사망자수가 적은 쪽으로) 이동하였음을 알 수 있다. 이는 법의 시행이 사망자 수 감소에 긍정적인 영향을 미쳤음을 시사한다. 후자의 분포에는 20대 후반과 50대 초반에서 자료의 공백이 발생했다. 하지만 이는 절대적인 자료의 수가 부족해서 발생한 것으로 추정된다. 대칭성 여부 역시 후자의 경우 자료의 수가 늘어난다면 대칭성을 띨 것으로 예상된다. 이를 통해 안전띠 법의 시행이 60이상의 다수의 사망자 발생을 방지하는 효과가 발생할 것으로 기대된다. 보다 정확한 비교를 위해서는 안전띠 법 시행 이후의 사망운전자수 데이터가 더 많이 수집되어야 한다.
아래는 4-2번 문제의 사망운전자수에 대해 줄기잎그림과 히스토그램을 각각 그린 것이다. 적절한 조정을 통해 줄기잎그림의 줄기와 히스토그램의 구간을 맞춰주었다.
##
## The decimal point is 1 digit(s) to the right of the |
##
## 2 | 4
## 2 |
## 3 | 04444
## 3 | 555556677888888999
## 4 | 000001111111112222222222233333333444444444
## 4 | 555555666667777778888888888999999999
## 5 | 000000111122222333444
## 5 | 55556666677777777788888899
## 6 | 00000011111112223344444
## 6 | 55567899
## 7 | 011113
## 7 | 678
## 8 | 4
## 8 | 5
## 9 | 0
| 줄기잎그림과 히스토그램 | |
|---|---|
| 공통점 | 그림의 테두리가 동일하다. 각 구간의 관측 빈도에 비례하는 길이의 기둥을 가진다. |
| 줄기잎그림 | 히스토그램 | |
|---|---|---|
| 차이점 | 구간 내의 자료들이 각각 숫자로 표기되어 있다. | 단일 길이의 상자가 쌓인 형태로 표현된다. |
| 작성된 줄기그림만으로 줄기수 변경이 가능하다. | 구간의 변경에 원자료가 필요하다. | |
| 구간 폭을 임의로 정할 수 없다. | 구간의 폭을 임의로 정할 수 있다. |
| 줄기잎그림 | 히스토그램 | |
|---|---|---|
| 장점 | 통계적 정보의 손실이 적다. 구간 폭 변경이 쉽다. |
구간 폭의 설정이 자유롭다. |
| 단점 | 구간 폭 설정에 제약이 있다. | 통계적 정보의 손실이 크다. 구간 폭 변경이 어렵다. |
결론적으로 크기 100~200 이내의 자료를 수작업으로 처리하는 경우 줄기잎그림이 히스토그램에 비해 효율적인 분포도를 제공한다. 그러나 자료수가 커지면 히스토그램이 보기에 나은 그래프를 제공한다.
보고서에 쓰인 모든 코드를 아래에 정리해두었다.
## R script
#2.
Nile
summary(Nile)
stem(Nile)
stem(Nile[Nile != 456])
#3.
head(warpbreaks)
A = warpbreaks[warpbreaks$wool=="A",]
B = warpbreaks[warpbreaks$wool=="B",]
summary(A$breaks)
summary(B$breaks)
length(A$breaks)==length(B$breaks)
stem(A$breaks)
stem(B$breaks)
stem(A$breaks, scale=2)
stem(B$breaks)
stem(A$breaks)
stem(B$breaks, scale=0.5)
#4.
#4.1.
killed = Seatbelts[,1] * 1000/Seatbelts[,2] * 10000/Seatbelts[,5]
plot(Seatbelts[,2], Seatbelts[,5], main="scatterplot of drivers and kms", xlab="drivers", ylab="kms")
killed
#4.2.
summary(killed)
stem(killed)
#4.3.
Seatbelts[,8]
sum(Seatbelts[,8]==0)
sum(Seatbelts[,8]==1)
length(Seatbelts[,8])
a = killed[1:169]
b = killed[170:192]
summary(a)
summary(b)
stem(a, scale=1)
stem(b, scale=2)
#5.
stem(killed)
hist(killed, nclass=14, main="Hist of Killed", xlab="Killed", xlim=c(20,100))