2주차 내용정리 입니다.
복습할라고 작성했습니다.
2주차에는 1주차와 다른 함수 등을 사용해보았습니다.
library(MASS)
str(anorexia)
head(anorexia)
anorexia$Postwt > anorexia$Prewt
mean(anorexia$Postwt > anorexia$Prewt)
head(mammals)
abs(mammals$brain - mean(mammals$brain)) > 2* sd(mammals$brain)
mean(abs(mammals$brain - mean(mammals$brain)) > 2* sd(mammals$brain))
head(SP500)
diff(SP500)
diff(SP500) > 0
mean(diff(SP500) > 0)
library(vcd)
str(Arthritis)
crosstab <- table(Arthritis$Improved, Arthritis$Treatment)
crosstab
crosstab["Marked", "Treated"]
crosstab <- xtabs(~ Improved + Treatment, data=Arthritis)
crosstab
table(Arthritis$Improved, Arthritis$Treatment, dnn=c("Improved", "Treatment"))
margin.table(crosstab, margin=1)
prop.table(crosstab, 1)
margin.table(crosstab, margin=2)
prop.table(crosstab, 2)
prop.table(crosstab)
addmargins(crosstab, margin=1)
addmargins(crosstab, margin =2)
addmargins(crosstab)
prop.table(prop.table(crosstab, margin=2))
addmargins(prop.table(crosstab, 2), 1)
prop.table(prop.table(crosstab, margin=1))
addmargins(prop.table(crosstab, 1), 2)
library(gmodels)
library(vcd)
str(Arthritis)
CrossTable(Arthritis$Improved, Arthritis$Treatment, prop.chisq=FALSE,
dnn=c("Improved", "Treatment"))
2주차에는 위의 코드를 작성해보았습니다.
str(anorexia)를 통해 데이터셋의 구조를 표시할 수 있습니다.
head(anorexia)는 데이터셋의 일부 행을 표시할 수 있습니다.
> str(anorexia)
'data.frame': 72 obs. of 3 variables:
$ Treat : Factor w/ 3 levels "CBT","Cont","FT": 2 2 2 2 2 2 2 2 2 2 ...
$ Prewt : num 80.7 89.4 91.8 74 78.1 88.3 87.3 75.1 80.6 78.4 ...
$ Postwt: num 80.2 80.1 86.4 86.3 76.1 78.1 75.1 86.7 73.5 84.6 ...
> head(anorexia)
Treat Prewt Postwt
1 Cont 80.7 80.2
2 Cont 89.4 80.1
3 Cont 91.8 86.4
4 Cont 74.0 86.3
5 Cont 78.1 76.1
6 Cont 88.3 78.1
> anorexia$Postwt > anorexia$Prewt
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE FALSE
[17] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE
[33] TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
[49] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
[65] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
> mean(anorexia$Postwt > anorexia$Prewt)
[1] 0.5833333
이 R 코드는 "anorexia" 데이터셋 내에서 조건을 검사하고 해당 조건을 만족하는 비율을 계산하는 작업을 수행합니다.
anorexia$Postwt > anorexia$Prewt
이 부분은 "anorexia" 데이터셋 내에서 "Postwt" 열의 값이 "Prewt" 열의 값보다 큰지 여부를 검사합니다.
이 비교 결과는 논리형 벡터(참 또는 거짓 값을 가지는 벡터)로 반환됩니다.
mean(anorexia$Postwt > anorexia$Prewt)
이 부분은 앞서 얻은 논리형 벡터를 평균내어 조건을 만족하는 비율을 계산합니다.
즉, "Postwt" 열의 값이 "Prewt" 열의 값보다 큰 비율을 계산하게 됩니다.
이 코드를 실행하면 "anorexia" 데이터셋에서 "Postwt"가 "Prewt"보다 큰 경우의 비율이 계산되고 출력됩니다.
> head(mammals)
body brain
Arctic fox 3.385 44.5
Owl monkey 0.480 15.5
Mountain beaver 1.350 8.1
Cow 465.000 423.0
Grey wolf 36.330 119.5
Goat 27.660 115.0
> abs(mammals$brain - mean(mammals$brain)) > 2* sd(mammals$brain)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[17] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[33] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> mean(abs(mammals$brain - mean(mammals$brain)) > 2* sd(mammals$brain))
[1] 0.03225806
head(mammals)
이 명령은 "mammals" 데이터셋의 처음 몇 개의 행을 표시하여 초기 데이터를 확인하는 역할을 합니다.
2abs(mammals$brain - mean(mammals$brain)) > 2 * sd(mammals$brain)
이데이터셋의 각 행마다 논리 조건을 계산합니다.
"brain" 열 값과 "brain" 열의 평균 값 간의 절대 차이가 "brain" 열의 표준 편차의 두 배보다 큰지 여부를 확인합니다.
3mean(abs(mammals$brain - mean(mammals$brain)) > 2 * sd(mammals$brain))
이 부분은 이전 단계에서 얻은 논리 값들의 평균을 계산합니다.
이는 "brain" 열을 기반으로 데이터셋에서 조건이 TRUE인 행의 비율을 계산하는 것입니다.
> head(SP500)
[1] -0.2588908 -0.8650307 -0.9804139 0.4504321 -1.1856666 -0.6629097
> diff(SP500)
[1] -0.6061398469 -0.1153832010 1.4308459307 -1.6360987095 0.5227568890 1.0135654321
[7] -2.8491152472 1.6327811941 1.9722923933 -2.0946040689 1.2218598077 0.0495922055
[13] -2.9033599933 2.9915052760 -0.7795429082 -0.8658116413 1.1878419134 -0.0984264628
[19] -0.5006657378 2.5560456373 -1.9592113706 0.7339038434 -0.3650999958 -0.9427644559
[25] 1.8951628700 -1.4700236480 0.4350105150 -1.2647829484 1.3511318592 0.0142545243
[31] 0.5650738318 -1.5137855010 -0.7817351060 1.3342059573 -0.5054176338 0.1259951424
[37] 1.8618176911 -0.9021821086 0.0097350516 -0.2365550163 0.5821954594 -1.3758697734
.....
[ reached getOption("max.print") -- omitted 1779 entries ]
> diff(SP500) > 0
[1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE
[16] FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
[31] TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[46] FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE
[61] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE
.....
[ reached getOption("max.print") -- omitted 1779 entries ]
> mean(diff(SP500) > 0)
[1] 0.4857863
head(SP500)
"SP500" 데이터셋의 처음 몇 개의 행을 표시하여 초기 데이터를 확인하는 역할을 합니다.
diff(SP500)
"SP500" 데이터의 연속된 값 사이의 차이를 계산합니다. 이를 통해 일일 수익률 또는 주가 변동성과 같은 정보를 얻을 수 있습니다.
diff(SP500) > 0
"SP500" 데이터의 각 날짜에서 다음 날짜와 비교하여 주가가 상승한 경우에 대한 논리 조건을 계산합니다.
주가가 상승한 경우 조건은 TRUE가 됩니다.
mean(diff(SP500) > 0)
이 부분은 이전 단계에서 얻은 논리 값의 평균을 계산합니다.
이것은 "SP500" 데이터셋에서 주가가 상승한 날의 평균 비율을 나타냅니다.
이 코드를 실행하면 "SP500" 데이터셋에서 주가가 상승한 날의 평균 비율을 출력합니다.
> library(vcd)
Loading required package: grid
> str(Arthritis)
'data.frame': 84 obs. of 5 variables:
$ ID : int 57 46 77 17 36 23 75 39 33 55 ...
$ Treatment: Factor w/ 2 levels "Placebo","Treated": 2 2 2 2 2 2 2 2 2 2 ...
$ Sex : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 2 2 2 2 2 ...
$ Age : int 27 29 30 32 46 58 59 59 63 63 ...
$ Improved : Ord.factor w/ 3 levels "None"<"Some"<..: 2 1 1 3 3 3 1 3 1 1 ...
>
vcd패키지를 불러오고 Arthritis 데이터셋의 구조를 확인할 수 있죠.
> crosstab <- table(Arthritis$Improved, Arthritis$Treatment)
> crosstab
Placebo Treated
None 29 13
Some 7 7
Marked 7 21
> crosstab["Marked", "Treated"]
[1] 21
"Arthritis" 데이터셋을 사용하여 교차표(cross-tabulation)를 생성하고 해당 표를 query하는 작업을 수행합니다.
crosstab <- table(Arthritis$Improved, Arthritis$Treatment)
-"Arthritis" 데이터셋에서 "Improved" 열과 "Treatment" 열 간의 교차표를 만듭니다.
교차표는 각각 "Improved" 열과 "Treatment" 열의 요소들 사이의 빈도를 보여줍니다.
crosstab
이 명령은 앞서 생성한 교차표를 출력합니다.
두 범주형 변수("Improved" 및 "Treatment") 간의 관계를 시각화하고 분석하는 데 사용될 수 있습니다.
crosstab["Marked", "Treated"]
이 명령은 교차표에서 "Marked" 행과 "Treated" 열의 교차 셀 값을 조회합니다.
"Marked" 개선을 보인 환자 중 "Treated" 치료를 받은 환자의 수를 나타냅니다.
따라서 코드의 결과는 "Marked" 개선을 보인 환자 중 "Treated" 치료를 받은 환자의 수를 나타내게 됩니다.
> crosstab <- xtabs(~ Improved + Treatment, data=Arthritis)
> crosstab
Treatment
Improved Placebo Treated
None 29 13
Some 7 7
Marked 7 21
"Arthritis" 데이터셋을 사용하여 교차표(cross-tabulation)를 생성하는 또 다른 방법을 보여줍니다.
xtabs() 함수를 사용하여 교차표를 만듭니다.
1xtabs(~ Improved + Treatment, data=Arthritis)
"Arthritis" 데이터셋에서 "Improved"와 "Treatment" 두 범주형 변수 간의 교차표를 생성합니다.
"~" 연산자를 사용하여 교차표를 만들 변수들을 지정합니다.
crosstab
생성된 교차표를 출력합니다.
교차표에는 "Improved"와 "Treatment"의 조합에 따른 빈도가 표시됩니다.
교차표는 두 범주형 변수 간의 관계를 시각화하고 분석하는 데 사용됩니다.
예를 들어, "Improved"와 "Treatment" 간의 관련성을 이해하고 특정 조합에 대한 빈도를 확인하는 데 도움이 됩니다.
> table(Arthritis$Improved, Arthritis$Treatment, dnn=c("Improved", "Treatment"))
Treatment
Improved Placebo Treated
None 29 13
Some 7 7
Marked 7 21
주어진 R 코드는 "Arthritis" 데이터셋에서 교차표(cross-tabulation)를 생성하는 또 다른 방법을 보여줍니다.
이 코드에서는 `table()` 함수를 사용하여 교차표를 만들고 열 및 행 이름을 지정합니다.
1table(Arthritis$Improved, Arthritis$Treatment, dnn=c("Improved", "Treatment"))
"Arthritis" 데이터셋에서 "Improved"와 "Treatment" 두 범주형 변수 간의 교차표를 생성합니다.
`dnn` 매개변수를 사용하여 교차표의 열 및 행 이름을 지정합니다.
이러한 교차표는 두 범주형 변수 간의 관계를 시각화하고 분석하는 데 사용됩니다.
"Improved" 및 "Treatment" 변수 간의 조합에 따른 빈도를 나타내며, 열 및 행 이름을 사용하여 결과를 더 명확하게 표시할 수 있습니다.
> margin.table(crosstab, margin=1)
Improved
None Some Marked
42 14 28
> prop.table(crosstab, 1)
Treatment
Improved Placebo Treated
None 0.6904762 0.3095238
Some 0.5000000 0.5000000
Marked 0.2500000 0.7500000
주어진 R 코드는 "Arthritis" 데이터셋에 대한 교차표를 사용하여 행별 합계와 각 행의 비율을 계산하는 데 사용됩니다.
margin.table(crosstab, margin=1)
- 이 부분은 `crosstab` 교차표에서 각 행의 합계를 계산합니다. 결과를 보면 "None" 개선, "Some" 개선 및 "Marked" 개선 그룹에 대한 관측치 수가 각각 42, 14, 28임을 나타냅니다.
prop.table(crosstab, 1)
- 이 부분은 `crosstab` 교차표를 사용하여 각 행의 비율을 계산합니다. 결과를 보면 "None" 개선 그룹에서 "Placebo"와 "Treated" 치료 그룹 각각의 비율이 각각 0.6904762 및 0.3095238임을 나타냅니다. "Some" 개선 그룹 및 "Marked" 개선 그룹에서도 비슷한 방식으로 비율이 계산됩니다.
교차표의 행별 합계와 각 행의 비율을 계산하면 데이터의 특정 부분에 대한 통계적 정보를 얻을 수 있으며,
범주형 변수 간의 관계를 더 잘 이해할 수 있게 됩니다.
> margin.table(crosstab, margin=2)
Treatment
Placebo Treated
43 41
> prop.table(crosstab, 2)
Treatment
Improved Placebo Treated
None 0.6744186 0.3170732
Some 0.1627907 0.1707317
Marked 0.1627907 0.5121951
margin.table(crosstab, margin=2)
`crosstab` 교차표에서 각 열의 합계를 계산합니다.
결과를 보면 "Placebo"와 "Treated" 치료 그룹에 대한 관측치 수가 각각 43과 41임을 나타냅니다.
prop.table(crosstab, 2)
`crosstab` 교차표를 사용하여 각 열의 비율을 계산합니다.
결과를 보면 "Placebo"와 "Treated" 치료 그룹 내에서 "None," "Some," 및 "Marked" 개선 그룹의 비율을 나타냅니다.
예를 들어, "Placebo" 그룹에서 "None" 개선 그룹의 비율은 0.6744186이고, "Treated" 그룹에서 "Marked" 개선 그룹의 비율은 0.5121951입니다.
> prop.table(crosstab)
Treatment
Improved Placebo Treated
None 0.34523810 0.15476190
Some 0.08333333 0.08333333
Marked 0.08333333 0.25000000
"Arthritis" 데이터셋에서 생성한 교차표(`crosstab`)의 전체 비율을 계산합니다.
이를 통해 각 "Improved" 그룹과 "Treatment" 그룹의 상대적 비율을 확인할 수 있습니다.
"None" 개선 그룹에서 "Placebo" 치료 비율은 약 0.345, "Treated" 치료 비율은 약 0.155입니다.
"Some" 개선 그룹과 "Marked" 개선 그룹에서도 "Placebo" 및 "Treated" 치료 비율이 계산되며,
각 그룹 간의 비율을 확인할 수 있습니다.
> addmargins(crosstab, margin=1)
Treatment
Improved Placebo Treated
None 29 13
Some 7 7
Marked 7 21
Sum 43 41
> addmargins(crosstab, margin =2)
Treatment
Improved Placebo Treated Sum
None 29 13 42
Some 7 7 14
Marked 7 21 28
> addmargins(crosstab)
Treatment
Improved Placebo Treated Sum
None 29 13 42
Some 7 7 14
Marked 7 21 28
Sum 43 41 84
"Arthritis" 데이터셋에서 생성한 교차표(`crosstab`)에 대한 합계(margins)를 추가하는 작업을 수행합니다.
addmargins(crosstab, margin=1)
교차표(`crosstab`)에 대한 행 합계를 추가합니다.
"None," "Some," 및 "Marked" 개선 그룹 각각의 합계와 전체 합계가 표시됩니다.
addmargins(crosstab, margin=2)
교차표(`crosstab`)에 대한 열 합계를 추가합니다.
"Placebo"와 "Treated" 치료 그룹 각각의 합계와 전체 합계가 표시됩니다.
addmargins(crosstab)
교차표(`crosstab`)에 대한 행 합계와 열 합계를 모두 추가합니다.
"None," "Some," 및 "Marked" 개선 그룹의 합계, "Placebo"와 "Treated" 치료 그룹의 합계, 그리고 전체 합계가 표시됩니다.
이러한 합계는 데이터의 특정 부분 및 전체에 대한 정보를 제공하며, 교차표의 셀들 간의 상대적 관계를 이해하는 데 도움이 됩니다.
> prop.table(crosstab, margin=2)
Treatment
Improved Placebo Treated
None 0.6744186 0.3170732
Some 0.1627907 0.1707317
Marked 0.1627907 0.5121951
> addmargins(prop.table(crosstab, 2), 1)
Treatment
Improved Placebo Treated
None 0.6744186 0.3170732
Some 0.1627907 0.1707317
Marked 0.1627907 0.5121951
Sum 1.0000000 1.0000000
> addmargins(prop.table(crosstab, 1), 2)
Treatment
Improved Placebo Treated Sum
None 0.6904762 0.3095238 1.0000000
Some 0.5000000 0.5000000 1.0000000
Marked 0.2500000 0.7500000 1.0000000
"Arthritis" 데이터셋에서 생성한 교차표(`crosstab`)의 비율을 계산하고 합계(margins)를 추가하는 작업을 수행합니다.
prop.table(crosstab, margin=2)
교차표의 열 기준으로 비율을 계산합니다.
각 "Improved" 그룹 내에서 "Placebo"와 "Treated" 치료 그룹의 비율이 계산됩니다.
addmargins(prop.table(crosstab, 2), 1)
교차표의 열 기준 비율에 대한 행 합계를 추가합니다.
각 "Improved" 그룹 내에서 "Placebo"와 "Treated" 치료 그룹의 비율과 그 합계가 표시됩니다.
addmargins(prop.table(crosstab, 1), 2)
교차표의 행 기준 비율에 대한 열 합계를 추가합니다.
"Placebo"와 "Treated" 치료 그룹 내에서 "Improved" 그룹의 비율과 그 합계가 표시됩니다.
이러한 비율과 합계를 통해 데이터의 다양한 관점에서 범주형 변수 간의 관계를 더 자세히 이해할 수 있습니다.
> library(gmodels)
> CrossTable(Arthritis$Improved, Arthritis$Treatment, prop.chisq=FALSE,
+ dnn=c("Improved", "Treatment"))
Cell Contents
|-------------------------|
| N |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|-------------------------|
Total Observations in Table: 84
| Treatment
Improved | Placebo | Treated | Row Total |
-------------|-----------|-----------|-----------|
None | 29 | 13 | 42 |
| 0.690 | 0.310 | 0.500 |
| 0.674 | 0.317 | |
| 0.345 | 0.155 | |
-------------|-----------|-----------|-----------|
Some | 7 | 7 | 14 |
| 0.500 | 0.500 | 0.167 |
| 0.163 | 0.171 | |
| 0.083 | 0.083 | |
-------------|-----------|-----------|-----------|
Marked | 7 | 21 | 28 |
| 0.250 | 0.750 | 0.333 |
| 0.163 | 0.512 | |
| 0.083 | 0.250 | |
-------------|-----------|-----------|-----------|
Column Total | 43 | 41 | 84 |
| 0.512 | 0.488 | |
-------------|-----------|-----------|-----------|
`gmodels` 패키지의 `CrossTable` 함수를 사용하여 "Arthritis" 데이터셋에서 범주형 변수인 "Improved"와 "Treatment" 간의 교차표를 생성한 결과를 나타냅니다. 이 표는 각 셀에 관측치 수, 행 및 열 백분율을 표시하여 범주 간의 관계를 요약합니다.
교차표 정리
표의 왼쪽 부분은 "Improved"의 범주 ("None," "Some," "Marked")를 나타내고,
위쪽 부분은 "Treatment"의 범주 ("Placebo," "Treated")를 나타냅니다.
각 셀에는 해당 셀의 관측치 수가 표시됩니다.
"N / Row Total" 열은 각 행에서의 해당 범주의 비율을 나타냅니다.
"N / Col Total" 열은 각 열에서의 해당 범주의 비율을 나타냅니다.
"N / Table Total" 열은 전체 테이블에서 해당 범주의 비율을 나타냅니다.
전체 표에는 84개의 관측치가 있음을 나타냅니다.
이 교차표를 통해 "Improved"와 "Treatment" 간의 관계를 시각화하고, 각 범주의 비율을 비교할 수 있습니다.
즐거운 연휴 보내세요.
'🌐 R language' 카테고리의 다른 글
R - 3주차 내용정리 (2) | 2023.10.16 |
---|---|
R - 1주차 내용정리 (0) | 2023.09.16 |
R 언어 - RTOOLS43 설치하기 (0) | 2023.09.14 |
R 스튜디오 인터페이스 설명 (0) | 2023.09.08 |
R STUDIO 설치하기 (0) | 2023.09.08 |