R 3주차 내용정리 입니다.
복습할라고 작성했습니다.
3주차는 2주차에 이어 작성된 코드입니다.
multtab <- table(Arthritis$Improved, Arthritis$Sex, Arthritis$Treatment)
multtab
multtab <- with(Arthritis, table(Improved, Sex, Treatment))
multtab
multtab <- xtabs(~ Improved + Sex + Treatment, data = Arthritis)
multtab
ftable(multtab)
ftable(multtab, row.vars = c(2, 3))
ftable(multtab, col.vars = c(1, 2))
ftable(Arthritis[c("Improved", "Sex","Treatment")], row.vars = c(2, 3))
margin.table(multtab, 1)
margin.table(multtab, 2)
margin.table(multtab, 3)
margin.table(multtab, c(1,3))
ftable(prop.table(multtab), c(2, 3))
ftable(addmargins(prop.table(multtab, c(2,3)), 1))
library(MASS)
str(survey)
median(survey$Pulse)
median(survey$Pulse, na.rm = TRUE)
quantile(survey$Pulse, probs = 0.05, na.rm = TRUE)
quantile(survey$Pulse, 0.5, na.rm = TRUE)
quantile(survey$Pulse, c(0.05, 0.95), na.rm = TRUE)
quantile(survey$Pulse, na.rm = TRUE)
survey$Pulse <= 80
mean(survey$Pulse <= 80, na.rm = TRUE)
mean(survey$Pulse, na.rm = TRUE)
median(survey$Pulse, na.rm = TRUE)
str(iris)
summary(iris$Sepal.Width)
summary(iris$Species)
summary(as.character(iris$Species))
summary(iris)
iris.lst <- as.list(iris)
summary(iris.lst)
lapply(iris.lst, summary)
range(survey$Pulse, na.rm = TRUE)
diff(range(survey$Pulse, na.rm = TRUE))
var(survey$Pulse, na.rm = TRUE)
sd(survey$Pulse, na.rm = TRUE)
str(mtcars)
library(pastecs)
stat.desc(mtcars[c("mpg", "hp", "wt")])
library(psych)
describe(mtcars[c("mpg", "hp", "wt")])
str(survey)
levels(survey$Exer)
tapply(survey$Pulse, INDEX = survey$Exer, FUN = mean, na.rm=TRUE)
tapply(survey$Pulse, survey$Sex, mean, na.rm = TRUE)
tapply(survey$Pulse,list(survey$Exer, survey$Sex), mean, na.rm=TRUE)
aggregate(survey$Pulse, by=list(Exercise=survey$Exer),
FUN=mean, na.rm=TRUE)
aggregate(survey$Pulse, list(Exercise=survey$Exer, Sex=survey$Sex),
mean, na.rm=TRUE)
aggregate(survey[c("Pulse", "Age")],
list(Exercise=survey$Exer), mean, na.rm=TRUE)
myStats <- function(x, na.rm=FALSE) {
if (na.rm) x <- x[!is.na(x)]
n <- length(x)
mean <- mean(x)
sd <- sd(x)
skew <- sum((x-mean)^3/sd^3)/n
kurt <- sum((x-mean)^4/sd^4)/n - 3
return(c(n=n, mean=mean, sd=sd, skewness=skew, kurtosis=kurt))
}
aggregate(survey[c("Pulse", "Age")],
list(Exercise=survey$Exer), myStats, na.rm=TRUE)
by(survey[c("Pulse", "Age")], INDICES=list(Exercise=survey$Exer), FUN=summary)
aggregate(survey[c("Pulse", "Age")], list(Exercise=survey$Exer), summary)
by(survey[c("Pulse", "Age")], list(Exercise=survey$Exer),
function(x) sapply(x, myStats, na.rm=TRUE))
library(psych)
describeBy(survey[c("Pulse", "Age")], group=list(Exercise=survey$Exer))
하나하나씩 해석해봅시다.
> multtab <- table(Arthritis$Improved, Arthritis$Sex, Arthritis$Treatment)
> multtab
, , = Placebo
Female Male
None 19 10
Some 7 0
Marked 6 1
, , = Treated
Female Male
None 6 7
Some 5 2
Marked 16 5
"Arthritis" 데이터셋에서 세 개의 범주형 변수인 "Improved," "성별" 및 "Treatment" 간의 다차원 교차표를 생성합니다. 이러한 다차원 교차표는 각 변수의 조합에 따른 관측치 수를 나타내며, 3차원으로 나열되어 표시됩니다.
`multtab` 다차원 교차표는 다음과 같이 표현됩니다
1. `Treatment = Placebo` 경우:
Improved 에 따른 각 행, 성별에 따른 각 열의 관측치 수를 나타냅니다. 예를 들어, "None" 개선 중인 여성 환자의 수는 19명이고, "Some" 개선 중인 남성 환자의 수는 0명입니다.
2. `Treatment = Treated` 경우:
마찬가지로 `Improved`에 따른 각 행, 성별에 따른 각 열의 관측치 수를 나타냅니다. 예를 들어, "Marked" 개선 중인 남성 환자의 수는 5명입니다.
> multtab <- with(Arthritis, table(Improved, Sex, Treatment))
> multtab
, , Treatment = Placebo
Sex
Improved Female Male
None 19 10
Some 7 0
Marked 6 1
, , Treatment = Treated
Sex
Improved Female Male
None 6 7
Some 5 2
Marked 16 5
데이터 프레임 'Arthritis'에서 다차원 교차표를 만들고 해당 결과를 출력합니다. 'Improved' (즉, 개선 정도), 'Sex' (성별), 'Treatment' (치료) 변수에 따른 빈도를 나타내는 교차표를 생성합니다.
1. 'Treatment'이 "Placebo"인 경우:
- "None" 개선 정도에서 "Female"은 19명, "Male"은 10명입니다.
- "Some" 개선 정도에서 "Female"은 7명, "Male"은 0명입니다.
- "Marked" 개선 정도에서 "Female"은 6명, "Male"은 1명입니다.
2. 'Treatment'이 "Treated"인 경우:
- "None" 개선 정도에서 "Female"은 6명, "Male"은 7명입니다.
- "Some" 개선 정도에서 "Female"은 5명, "Male"은 2명입니다.
- "Marked" 개선 정도에서 "Female"은 16명, "Male"은 5명입니다.
이 교차표는 "Placebo" 그룹에서 "None" 개선 정도의 여성 환자가 가장 많고, "Some" 개선 정도의 남성 환자가 없는 것을 알 수 있습니다.
세 코드 모두 'Arthritis' 데이터 프레임에서 'Improved' (즉, 개선 정도), 'Sex' (성별), 'Treatment' (치료) 변수에 대한 교차표를 생성하고 결과를 출력하는 데 사용됩니다. 그러나 코드 간에는 다음과 같은 차이점이 있습니다:
- 첫 번째 코드
multtab <- table(Arthritis$Improved, Arthritis$Sex, Arthritis$Treatment)
- 두 번째 코드
multtab <- with(Arthritis, table(Improved, Sex, Treatment))
- 세 번째 코드
multtab <- xtabs(~ Improved + Sex + Treatment, data = Arthritis)
각 코드는 교차표를 생성하는 방법과 변수를 참조하는 방법에 차이가 있습니다. 첫 번째 코드에서는 변수를 데이터프레임에 직접 참조하고, 두 번째 코드에서는 'with' 함수를 사용하여 변수를 참조하며, 세 번째 코드에서는 공식(~)을 사용하여 변수를 지정합니다.
변수 참조
- 첫 번째 코드와 두 번째 코드는 변수를 'Arthritis$Improved', 'Arthritis$Sex', 'Arthritis$Treatment'와 같이 데이터프레임의 컬럼으로 참조합니다.
- 세 번째 코드에서는 'xtabs' 함수 내에서 변수를 직접 사용합니다.
결과
- 결과는 모든 코드에서 동일합니다. 교차표는 'Improved', 'Sex', 'Treatment' 변수의 조합에 따라 빈도를 보여주며, "Placebo"와 "Treated" 두 가지 치료 조건에 대한 결과가 표시됩니다.
> ftable(multtab)
Treatment Placebo Treated
Improved Sex
None Female 19 6
Male 10 7
Some Female 7 5
Male 0 2
Marked Female 6 16
Male 1 5
이전에 생성한 교차표 `multtab`을 사용하여 테이블을 더 구조화된 형태로 출력하는데 `ftable` 함수를 사용합니다. 결과는 각각의 'Improved' (개선 정도), 'Sex' (성별), 'Treatment' (치료) 변수에 대한 빈도를 더 읽기 쉬운 형식으로 표시합니다.
이 결과를 해석하면, 예를 들어 "None" 개선 정도에서 "Placebo" 치료를 받는 여성 환자는 19명이고 "Treated" 치료를 받는 여성 환자는 6명이라는 것을 알 수 있습니다.
> ftable(multtab, row.vars = c(2, 3))
Improved None Some Marked
Sex Treatment
Female Placebo 19 7 6
Treated 6 5 16
Male Placebo 10 0 1
Treated 7 2 5
`ftable` 함수를 사용하여 `multtab` 교차표를 더 구조화된 형태로 출력하는데, `row.vars` 인수를 사용하여 특정 행 변수를 선택한 것을 보여줍니다. 결과는 'Sex' (성별)와 'Treatment' (치료) 변수를 행으로 선택하여 표시됩니다. 이렇게 하면 각 성별과 치료 조건에 따른 "Improved" (개선 정도) 변수의 빈도를 빠르게 파악할 수 있습니다.
이 결과를 해석하면, 예를 들어 "Female" 환자 중 "Placebo" 치료를 받는 환자 중 "None" 개선 정도가 19명, "Some" 개선 정도가 7명, "Marked" 개선 정도가 6명이라는 것을 알 수 있습니다. 이와 같은 표는 데이터의 패턴을 보다 구체적으로 이해하는 데 도움을 줍니다.
> ftable(multtab, col.vars = c(1, 2))
Improved None Some Marked
Sex Female Male Female Male Female Male
Treatment
Placebo 19 10 7 0 6 1
Treated 6 7 5 2 16 5
`ftable` 함수를 사용하여 `multtab` 교차표를 더 구조화된 형태로 출력하는데, `col.vars` 인수를 사용하여 특정 열 변수를 선택한 것을 보여줍니다. 결과는 'Treatment' (치료) 변수를 열로 선택하여 표시되며, 이를 기반으로 "Improved" (개선 정도)와 "Sex" (성별) 변수의 빈도를 보여줍니다.
"Placebo" 치료를 받는 환자 중 "None" 개선 정도가 "Female" 환자가 19명, "Male" 환자가 10명이라는 것을 알 수 있습니다. 이와 같은 표는 데이터의 패턴을 빠르게 파악할 수 있도록 도와줍니다.
> ftable(Arthritis[c("Improved", "Sex","Treatment")], row.vars = c(2, 3))
Improved None Some Marked
Sex Treatment
Female Placebo 19 7 6
Treated 6 5 16
Male Placebo 10 0 1
Treated 7 2 5
데이터 프레임 'Arthritis'에서 "Improved" (개선 정도), "Sex" (성별), "Treatment" (치료) 변수를 선택하고, `ftable` 함수를 사용하여 결과를 출력합니다. 결과는 `row.vars` 인수를 사용하여 "Sex"와 "Treatment" 변수를 행으로 선택한 것으로, "Improved" 변수의 빈도를 이러한 조합에 따라 표시합니다.
결과는 이전 코드와 동일합니다.
각 성별과 치료 조건에 따른 "Improved" (개선 정도) 변수의 빈도를 빠르게 파악할 수 있도록 구조화되어 있습니다.
> margin.table(multtab, 1)
Improved
None Some Marked
42 14 28
> margin.table(multtab, 2)
Sex
Female Male
59 25
> margin.table(multtab, 3)
Treatment
Placebo Treated
43 41
>
> margin.table(multtab, c(1,3))
Treatment
Improved Placebo Treated
None 29 13
Some 7 7
Marked 7 21
`margin.table` 함수를 사용하여 교차표(multtab)에서 주어진 변수(행, 열, 또는 여러 변수)에 대한 마진(합계)을 계산하고 출력합니다.
1. 첫 번째 `margin.table(multtab, 1)`은 "Improved" (개선 정도) 변수를 기준으로 각 범주에 대한 빈도를 출력합니다.
2. 두 번째 `margin.table(multtab, 2)`는 "Sex" (성별) 변수를 기준으로 각 범주에 대한 빈도를 출력합니다.
3. 세 번째 `margin.table(multtab, 3)`은 "Treatment" (치료) 변수를 기준으로 각 범주에 대한 빈도를 출력합니다.
4. 네 번째 `margin.table(multtab, c(1, 3))`는 "Improved" (개선 정도)와 "Treatment" (치료) 변수를 기준으로 각 범주에 대한 빈도를 출력합니다.
> ftable(prop.table(multtab), c(2, 3))
Treatment Placebo Treated
Improved Sex
None Female 0.22619048 0.07142857
Male 0.11904762 0.08333333
Some Female 0.08333333 0.05952381
Male 0.00000000 0.02380952
Marked Female 0.07142857 0.19047619
Male 0.01190476 0.05952381
`prop.table` 함수를 사용하여 교차표인 `multtab`에서 상대 빈도(비율)를 계산하고 출력합니다. `c(2, 3)`를 사용하여 "Sex" (성별)와 "Treatment" (치료) 변수를 열로 선택합니다. 결과는 각 범주에 대한 상대 빈도를 보여줍니다.
"Improved" (개선 정도), "Sex" (성별), "Treatment" (치료) 변수에 따른 상대 빈도를 나타냅니다. 예를 들어, "None" 개선 정도에서 "Female" 환자 중 "Placebo" 치료를 받는 환자의 상대 빈도는 약 0.226이고 "Treated" 치료를 받는 환자의 상대 빈도는 약 0.071입니다.
> ftable(addmargins(prop.table(multtab, c(2,3)), 1))
Treatment Placebo Treated
Improved Sex
None Female 0.59375000 0.22222222
Male 0.90909091 0.50000000
Some Female 0.21875000 0.18518519
Male 0.00000000 0.14285714
Marked Female 0.18750000 0.59259259
Male 0.09090909 0.35714286
Sum Female 1.00000000 1.00000000
Male 1.00000000 1.00000000
`addmargins` 함수를 사용하여 상대 빈도(비율) 테이블인 `prop.table(multtab, c(2, 3))`에 합계 행과 열을 추가한 후 결과를 출력합니다.
"Improved" (개선 정도), "Sex" (성별), "Treatment" (치료) 변수에 따른 상대 빈도를 보여주며, 각 행과 열에 대한 합계도 포함하고 있습니다.
> library(MASS)
> str(survey)
'data.frame': 237 obs. of 12 variables:
$ Sex : Factor w/ 2 levels "Female","Male": 1 2 2 2 2 1 2 1 2 2 ...
$ Wr.Hnd: num 18.5 19.5 18 18.8 20 18 17.7 17 20 18.5 ...
$ NW.Hnd: num 18 20.5 13.3 18.9 20 17.7 17.7 17.3 19.5 18.5 ...
$ W.Hnd : Factor w/ 2 levels "Left","Right": 2 1 2 2 2 2 2 2 2 2 ...
$ Fold : Factor w/ 3 levels "L on R","Neither",..: 3 3 1 3 2 1 1 3 3 3 ...
$ Pulse : int 92 104 87 NA 35 64 83 74 72 90 ...
$ Clap : Factor w/ 3 levels "Left","Neither",..: 1 1 2 2 3 3 3 3 3 3 ...
$ Exer : Factor w/ 3 levels "Freq","None",..: 3 2 2 2 3 3 1 1 3 3 ...
$ Smoke : Factor w/ 4 levels "Heavy","Never",..: 2 4 3 2 2 2 2 2 2 2 ...
$ Height: num 173 178 NA 160 165 ...
$ M.I : Factor w/ 2 levels "Imperial","Metric": 2 1 NA 2 2 1 1 2 2 2 ...
$ Age : num 18.2 17.6 16.9 20.3 23.7 ...
'MASS' 패키지에서 불러온 'survey' 데이터 프레임에 대한 정보를 출력하고 있습니다. 'str' 함수를 사용하여 데이터 프레임의 구조와 변수에 대한 정보를 확인할 수 있습니다. 여기에서는 'survey' 데이터 프레임에 포함된 변수와 각 변수의 특성에 대한 정보를 제공합니다:
1. 'Sex' (성별): 범주형 변수로, "Female"와 "Male" 두 가지 레벨을 가집니다.
2. 'Wr.Hnd' (쓰기 손): 숫자(실수) 값으로, 손의 폭을 나타냅니다.
3. 'NW.Hnd' (안쓰기 손): 숫자(실수) 값으로, 안쓰기 손의 폭을 나타냅니다.
4. 'W.Hnd' (사용하는 손): 범주형 변수로, "Left"와 "Right" 두 가지 레벨을 가집니다.
5. 'Fold' (종이 접기 능력): 범주형 변수로, "L on R" (왼손으로 오른손을 덮음), "Neither" (양손으로 덮지 않음), "R on L" (오른손으로 왼손을 덮음) 세 가지 레벨을 가집니다.
6. 'Pulse' (맥박): 정수 값으로, 맥박을 나타냅니다.
7. 'Clap' (박수): 범주형 변수로, "Left" (왼손으로 박수), "Neither" (박수를 치지 않음), "Right" (오른손으로 박수) 세 가지 레벨을 가집니다.
8. 'Exer' (운동 빈도): 범주형 변수로, "Freq" (자주), "None" (전혀 없음), "Some" (가끔) 세 가지 레벨을 가집니다.
9. 'Smoke' (흡연 여부): 범주형 변수로, "Heavy" (많이 흡연), "Never" (전혀 안 흡연), "Occasional" (가끔 흡연), "Reguluar" (정기적으로 흡연) 네 가지 레벨을 가집니다.
10. 'Height' (키): 숫자(실수) 값으로, 키를 나타냅니다.
11. 'M.I' (단위): 범주형 변수로, "Imperial" (영국식 단위)와 "Metric" (미터법) 두 가지 레벨을 가집니다.
12. 'Age' (나이): 숫자(실수) 값으로, 나이를 나타냅니다.
> median(survey$Pulse)
[1] NA
> median(survey$Pulse, na.rm = TRUE)
[1] 72.5
첫 번째 명령인 `median(survey$Pulse)`은 'survey' 데이터 프레임의 'Pulse' 변수의 중앙값을 계산하려고 시도했지만 결과로 `NA` (결측치)를 반환했습니다. 이는 'Pulse' 변수에 결측치(누락된 데이터)가 포함되어 있기 때문입니다.
`median(survey$Pulse, na.rm = TRUE)`은 'Pulse' 변수의 중앙값을 계산하고, `na.rm = TRUE` 인수를 사용하여 결측치를 무시하도록 지정했습니다. 결과로 중앙값은 72.5가 반환되었습니다.
결측치가 있는 데이터에서 중앙값을 계산할 때 `na.rm = TRUE`를 사용하면 결측치가 있는 경우에도 중앙값을 계산할 수 있습니다.
> quantile(survey$Pulse, probs = 0.05, na.rm = TRUE)
5%
59.55
> quantile(survey$Pulse, 0.5, na.rm = TRUE)
50%
72.5
'survey' 데이터 프레임의 'Pulse' 변수에서 특정 백분위수(분위수)를 계산하는 방법을 보여줍니다. 'Pulse' 변수는 맥박을 나타내는 변수입니다.
첫 번째 명령인 `quantile(survey$Pulse, probs = 0.05, na.rm = TRUE)`은 'Pulse' 변수의 하위 5% 백분위수(5번째 백분위수)를 계산합니다. 결과로 59.55가 반환됩니다. 이것은 'Pulse' 값 중에서 하위 5%에 해당하는 값입니다.
두 번째 명령인 `quantile(survey$Pulse, 0.5, na.rm = TRUE)`은 중앙값(중간값 또는 50% 백분위수)를 계산합니다. 결과로 72.5가 반환됩니다. 이것은 'Pulse' 값의 중앙에 있는 값으로, 데이터를 50%로 분할하는 위치를 나타냅니다.
`na.rm = TRUE`로 결측치(NA 값)를 통해 결측치가 있는 경우에도 계산을 수행할 수 있게 합니다.
> quantile(survey$Pulse, c(0.05, 0.95), na.rm = TRUE)
5% 95%
59.55 92.00
> quantile(survey$Pulse, na.rm = TRUE)
0% 25% 50% 75% 100%
35.0 66.0 72.5 80.0 104.0
첫 번째 명령인 `quantile(survey$Pulse, c(0.05, 0.95), na.rm = TRUE)`은 'survey' 데이터 프레임의 'Pulse' 변수에서 5% 백분위수(하위 5%)와 95% 백분위수(상위 5%)를 동시에 계산합니다. 결과로 5% 백분위수는 59.55이고 95% 백분위수는 92.00이 반환됩니다. 이것은 'Pulse' 값 중에서 하위 5%와 상위 5%에 해당하는 값입니다.
두 번째 명령인 `quantile(survey$Pulse, na.rm = TRUE)`은 'Pulse' 변수에서 기본적인 백분위수를 계산합니다. 결과로 0%, 25%, 50% (중앙값), 75%, 그리고 100% 백분위수가 반환됩니다.
> survey$Pulse <= 80
[1] FALSE FALSE FALSE NA TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE NA TRUE TRUE NA FALSE TRUE NA TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
[32] TRUE TRUE TRUE TRUE TRUE NA TRUE TRUE NA NA TRUE TRUE TRUE TRUE NA FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE NA TRUE TRUE TRUE NA TRUE TRUE
[63] TRUE NA TRUE NA NA TRUE NA TRUE TRUE NA TRUE TRUE FALSE TRUE TRUE NA TRUE NA TRUE TRUE FALSE NA FALSE TRUE TRUE TRUE TRUE FALSE TRUE NA TRUE
[94] NA TRUE NA TRUE TRUE NA TRUE NA TRUE NA TRUE TRUE TRUE NA FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
[125] TRUE NA TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE NA TRUE FALSE NA TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE
[156] TRUE NA TRUE NA FALSE TRUE NA TRUE TRUE NA FALSE TRUE TRUE NA TRUE NA TRUE TRUE TRUE TRUE FALSE TRUE FALSE NA TRUE TRUE FALSE TRUE TRUE FALSE TRUE
[187] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE NA TRUE FALSE TRUE TRUE TRUE NA NA
[218] FALSE NA TRUE NA TRUE FALSE NA NA FALSE TRUE TRUE TRUE TRUE TRUE NA FALSE FALSE NA FALSE FALSE
이 코드는 'survey' 데이터 프레임의 'Pulse' 변수에서 80보다 작거나 같은 값에 대한 불리언 벡터를 생성합니다. 불리언 벡터의 각 요소는 'Pulse' 값이 80보다 작거나 같으면 `TRUE`, 그렇지 않으면 `FALSE`가 됩니다. 또한, 결측치(NA) 값이 있는 경우에는 `NA`가 포함됩니다.
이 결과는 'Pulse' 변수의 각 관측치에 대해 해당 조건을 만족하는지 여부를 보여줍니다. 예를 들어, 5번째 관측치에서 'Pulse' 값은 80보다 작거나 같으므로 `TRUE`가 되고, 4번째와 13번째 관측치에서는 결측치이므로 `NA`로 표시됩니다.
> mean(survey$Pulse <= 80, na.rm = TRUE)
[1] 0.7552083
>
> mean(survey$Pulse, na.rm = TRUE)
[1] 74.15104
> median(survey$Pulse, na.rm = TRUE)
[1] 72.5
첫 번째 명령인 `mean(survey$Pulse <= 80, na.rm = TRUE)`은 'survey' 데이터 프레임의 'Pulse' 변수에서 80보다 작거나 같은 값의 비율을 계산합니다. `na.rm = TRUE`를 사용하여 결측치를 무시하도록 지정했습니다. 결과로 80보다 작거나 같은 값의 비율은 약 0.7552 또는 75.52%가 반환됩니다. 이는 데이터에서 80보다 작거나 같은 값이 전체 데이터의 약 75.52%를 차지한다는 것을 의미합니다.
두 번째 명령인 `mean(survey$Pulse, na.rm = TRUE)`은 'Pulse' 변수의 평균값을 계산합니다. `na.rm = TRUE`를 사용하여 결측치를 무시하도록 지정했습니다. 결과로 'Pulse' 변수의 평균값은 약 74.15104가 반환됩니다.
세 번째 명령인 `median(survey$Pulse, na.rm = TRUE)`은 'Pulse' 변수의 중앙값을 계산합니다. `na.rm = TRUE`를 사용하여 결측치를 무시하도록 지정했습니다. 결과로 'Pulse' 변수의 중앙값은 72.5가 반환됩니다.
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
> summary(iris$Sepal.Width)
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.000 2.800 3.000 3.057 3.300 4.400
> summary(iris$Species)
setosa versicolor virginica
50 50 50
> summary(as.character(iris$Species))
Length Class Mode
150 character character
'iris' 데이터 프레임에 대한 정보를 출력하고, 'Sepal.Width' 변수와 'Species' 변수에 대한 요약 통계를 계산합니다.
`str(iris)`를 통해 'iris' 데이터 프레임의 구조를 출력합니다. 'iris' 데이터 프레임은 150개의 관측치와 5개의 변수로 구성되어 있으며, 각 변수에 대한 유형과 요약 정보가 표시됩니다. 이 데이터 프레임은 붓꽃의 꽃받침과 꽃잎의 길이 및 너비를 나타내는 데이터를 포함하며, 'Species' 변수는 붓꽃의 종에 대한 정보를 포함합니다.
`summary(iris$Sepal.Width)` 으로 'Sepal.Width' 변수에 대한 요약 통계를 계산합니다:
`summary(iris$Species)` 을 이용해 'Species' 변수에 대한 요약 통계를 계산합니다. 'Species' 변수는 붓꽃의 종을 나타내며, 요약 결과로 각 종의 빈도를 나타내는 결과가 표시됩니다. 모든 세 종(setosa, versicolor, virginica)의 빈도가 50개씩 있음을 보여줍니다.
`summary(as.character(iris$Species))` 명령은 'Species' 변수를 문자열로 변환한 후에 요약 통계를 계산합니다. 그 결과로 문자열 변수의 길이, 클래스 및 모드에 대한 정보가 표시됩니다.
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
`summary(iris)`를 작성하고 출력시켰을 때, iris 데이터의 수에 대한 모든 요약 통계를 계산하고, 변수 Species에 대한 정보를 출력합니다.
여기서 Sepal.length는 꽃받침 길이. Sepal.width는 꽃받침 너비, Petal..Length 꽃잎 길이, Petal.Width 꽃잎 너비, Species(꽃의 종류) 입니다.
여기서 min은 최솟값, 1st Quartile 제1사분위수, Median 중앙값, Mean 평균, 3rd Quartile 제3사분위수, Maximmum 최댓값 입니다.
> iris.lst <- as.list(iris)
> summary(iris.lst)
Length Class Mode
Sepal.Length 150 -none- numeric
Sepal.Width 150 -none- numeric
Petal.Length 150 -none- numeric
Petal.Width 150 -none- numeric
Species 150 factor numeric
`iris.lst <- as.list(iris)` 명령은 'iris' 데이터 프레임을 리스트로 변환하여 'iris.lst' 변수에 저장합니다. 각 리스트 요소는 데이터 프레임 'iris'의 각 열(변수)에 해당합니다.
그런 다음, `summary(iris.lst)` 명령을 사용하여 'iris.lst' 리스트의 구조를 확인합니다.
- 'Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width': 숫자(실수) 값으로 구성된 리스트 요소로, 모두 numeric 모드를 가지고 있습니다. 이러한 리스트 요소는 각각 'iris' 데이터 프레임의 열에 해당합니다.
- 'Species': 팩터(factor) 값으로 구성된 리스트 요소로, numeric 모드를 가지고 있습니다. 이 리스트 요소는 'iris' 데이터 프레임의 'Species' 열에 해당합니다. 'Species' 열은 붓꽃의 종에 대한 범주형 데이터를 나타냅니다.
이를 통해 'iris.lst' 리스트의 구조와 각 리스트 요소의 데이터 유형을 확인할 수 있습니다.
> lapply(iris.lst, summary)
$Sepal.Length
Min. 1st Qu. Median Mean 3rd Qu. Max.
4.300 5.100 5.800 5.843 6.400 7.900
$Sepal.Width
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.000 2.800 3.000 3.057 3.300 4.400
$Petal.Length
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 1.600 4.350 3.758 5.100 6.900
$Petal.Width
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.100 0.300 1.300 1.199 1.800 2.500
$Species
setosa versicolor virginica
50 50 50
`lapply(iris.lst, summary)` 명령은 'iris.lst' 리스트의 각 요소에 `summary` 함수를 적용하여 각 변수(열)에 대한 요약 통계를 계산합니다. 결과는 다음과 같이 리스트 형식으로 표시됩니다:
- 'Sepal.Length':
- Minimum (최솟값): 4.3
- 1st Quartile (1사분위수): 5.1
- Median (중앙값): 5.8
- Mean (평균): 5.843
- 3rd Quartile (3사분위수): 6.4
- Maximum (최댓값): 7.9
- 'Sepal.Width':
- Minimum (최솟값): 2.0
- 1st Quartile (1사분위수): 2.8
- Median (중앙값): 3.0
- Mean (평균): 3.057
- 3rd Quartile (3사분위수): 3.3
- Maximum (최댓값): 4.4
- 'Petal.Length':
- Minimum (최솟값): 1.0
- 1st Quartile (1사분위수): 1.6
- Median (중앙값): 4.35
- Mean (평균): 3.758
- 3rd Quartile (3사분위수): 5.1
- Maximum (최댓값): 6.9
- 'Petal.Width':
- Minimum (최솟값): 0.1
- 1st Quartile (1사분위수): 0.3
- Median (중앙값): 1.3
- Mean (평균): 1.199
- 3rd Quartile (3사분위수): 1.8
- Maximum (최댓값): 2.5
- 'Species':
- 'Species' 변수는 범주형 변수로, 'setosa', 'versicolor', 'virginica'의 3가지 종을 가집니다. 각 종은 50개의 관측치로 구성되어 있음을 보여주고 있습니다.
`lapply` 함수를 사용하여 리스트 내의 각 요소에 함수를 적용할 수 있으며, 이를 통해 다양한 변수에 대한 요약 통계를 계산할 수 있습니다.
> range(survey$Pulse, na.rm = TRUE)
[1] 35 104
> diff(range(survey$Pulse, na.rm = TRUE))
[1] 69
>
> var(survey$Pulse, na.rm = TRUE)
[1] 136.5896
> sd(survey$Pulse, na.rm = TRUE)
[1] 11.68716
`range(survey$Pulse, na.rm = TRUE)` : 'survey' 데이터 프레임의 'Pulse' 변수에서 최솟값과 최댓값을 계산합니다. `na.rm = TRUE`를 사용하여 결측치를 무시하도록 지정했습니다. 결과로 최솟값은 35이고 최댓값은 104가 반환됩니다. 이것은 'Pulse' 변수에서 관측된 값의 범위를 나타냅니다.
`diff(range(survey$Pulse, na.rm = TRUE))` 에서 `range` 함수의 결과에서 범위를 계산합니다. 결과로 69가 반환됩니다. 이는 'Pulse' 변수 값의 범위(최댓값과 최솟값 사이의 차이)를 나타냅니다.
`var(survey$Pulse, na.rm = TRUE)` : 'Pulse' 변수의 분산을 계산합니다. `na.rm = TRUE`를 사용하여 결측치를 무시하도록 지정했습니다. 결과로 분산은 약 136.5896이 반환됩니다. 이 값은 'Pulse' 변수 값의 분포가 얼마나 퍼져 있는지를 나타냅니다.
`sd(survey$Pulse, na.rm = TRUE)` 를 통해 'Pulse' 변수의 표준 편차를 계산합니다. `na.rm = TRUE`를 사용하여 결측치를 무시하도록 지정했습니다. 결과로 표준 편차는 약 11.68716이 반환됩니다. 표준 편차는 분산의 양의 제곱근으로, 데이터의 변동성을 나타내는 지표입니다.
> str(mtcars)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
str(mtcars)를 통해 mtcars의 데이터셋을 표현합니다. 이 데이터셋은 11개의 변수를 포함하고 있습니다.
mpg(마일퍼갤런), cyl(실린더) 등등의 변수를 포함하고 있습니다. 변수의 유형은 숫자유형입니다.
> library(pastecs)
> stat.desc(mtcars[c("mpg", "hp", "wt")])
mpg hp wt
nbr.val 32.0000000 32.0000000 32.0000000
nbr.null 0.0000000 0.0000000 0.0000000
nbr.na 0.0000000 0.0000000 0.0000000
min 10.4000000 52.0000000 1.5130000
max 33.9000000 335.0000000 5.4240000
range 23.5000000 283.0000000 3.9110000
sum 642.9000000 4694.0000000 102.9520000
median 19.2000000 123.0000000 3.3250000
mean 20.0906250 146.6875000 3.2172500
SE.mean 1.0654240 12.1203173 0.1729685
CI.mean.0.95 2.1729465 24.7195501 0.3527715
var 36.3241028 4700.8669355 0.9573790
std.dev 6.0269481 68.5628685 0.9784574
coef.var 0.2999881 0.4674077 0.3041285
우선 pastecs 라이브러리를 불러온 뒤, mtcars 데이터 프레임에서 세 변수에 대한 통계를 계산합니다.
nbr.val는 관측 수 nbr.null 결측 수 등등 통계를 계산할 수 있습니다.
> library(psych)
> describe(mtcars[c("mpg", "hp", "wt")])
vars n mean sd median trimmed mad min max range skew kurtosis
mpg 1 32 20.09 6.03 19.20 19.70 5.41 10.40 33.90 23.50 0.61 -0.37
hp 2 32 146.69 68.56 123.00 141.19 77.10 52.00 335.00 283.00 0.73 -0.14
wt 3 32 3.22 0.98 3.33 3.15 0.77 1.51 5.42 3.91 0.42 -0.02
se
mpg 1.07
hp 12.12
wt 0.17
psych 라이브러리를 우선 불러온 뒤, describe 함수를 이용해 위 처럼 mpg, hp, wt 변수에 대한 통계를 출력합니다.
위의 pastecs 라이브러리의 stat.decs 함수와 psych 라이브러리의 describe 함수와의 통계 차이를 살펴볼 수 있는데,
`pastecs` 라이브러리의 `stat.desc` 함수와 `psych` 라이브러리의 `describe` 함수는 변수에 대한 요약 통계를 제공하지만 약간의 차이가 있습니다.
`pastecs`의 `stat.desc` 함수:
- `mad` (중위 절대 편차): 변수의 중앙값과 평균값 사이의 거리를 중앙값에서 빼서 절댓값을 취한 것으로, 변수의 중앙 위치를 나타내는 지표입니다.
- `SE.mean` (평균의 표준 오차): 평균의 추정치가 얼마나 정확한지를 나타내는 지표입니다.
- `CI.mean.0.95` (평균의 95% 신뢰 구간): 평균값의 신뢰 구간을 나타내며, 95% 확률로 실제 평균이 이 구간에 포함되는 것으로 예상됩니다.
`psych`의 `describe` 함수:
- `trimmed` (Trimmed Mean): 변수의 평균에서 이상치를 제외한 값들의 평균을 나타내는 지표입니다.
- `skew` (왜도): 변수의 분포가 얼마나 비대칭인지를 나타내는 지표로, 양수면 오른쪽으로 비스듬히 치우쳐진 분포를 의미하며, 음수면 왼쪽으로 비스듬히 치우쳐진 분포를 의미합니다.
- `kurtosis` (첨도): 변수의 분포가 얼마나 뾰족한지를 나타내는 지표로, 0에 가까우면 정규 분포에 가까운 분포를 의미하며, 양수면 뾰족하고, 음수면 둥글다는 것을 나타냅니다.
> str(survey)
'data.frame': 237 obs. of 12 variables:
$ Sex : Factor w/ 2 levels "Female","Male": 1 2 2 2 2 1 2 1 2 2 ...
$ Wr.Hnd: num 18.5 19.5 18 18.8 20 18 17.7 17 20 18.5 ...
$ NW.Hnd: num 18 20.5 13.3 18.9 20 17.7 17.7 17.3 19.5 18.5 ...
$ W.Hnd : Factor w/ 2 levels "Left","Right": 2 1 2 2 2 2 2 2 2 2 ...
$ Fold : Factor w/ 3 levels "L on R","Neither",..: 3 3 1 3 2 1 1 3 3 3 ...
$ Pulse : int 92 104 87 NA 35 64 83 74 72 90 ...
$ Clap : Factor w/ 3 levels "Left","Neither",..: 1 1 2 2 3 3 3 3 3 3 ...
$ Exer : Factor w/ 3 levels "Freq","None",..: 3 2 2 2 3 3 1 1 3 3 ...
$ Smoke : Factor w/ 4 levels "Heavy","Never",..: 2 4 3 2 2 2 2 2 2 2 ...
$ Height: num 173 178 NA 160 165 ...
$ M.I : Factor w/ 2 levels "Imperial","Metric": 2 1 NA 2 2 1 1 2 2 2 ...
$ Age : num 18.2 17.6 16.9 20.3 23.7 ...
survey 데이터에 포함된 변수를 출력합니다.
Sax는 성별을 나타내는 변수입니다. Female은 1 Male은 2 입니다.
Wr.Hnd은 오른손의 길이를 나타내는 변수입니다.
이외 등등 다양한 변수를 출력합니다.
> levels(survey$Exer)
[1] "Freq" "None" "Some"
survey 데이터의 Exer 변수에는 세가지 카테고리가 있고 level 함수를 이용한 카테고리를 확인할 수 있습니다.
3가지의 카테고리를 확인할 수 있습니다.
Freq : 자주 운동함 / None : 전혀 하지않음 / Some : 약간 운동을 함
> tapply(survey$Pulse, INDEX = survey$Exer, FUN = mean, na.rm=TRUE)
Freq None Some
71.96842 76.76471 76.18750
>
> tapply(survey$Pulse, survey$Sex, mean, na.rm = TRUE)
Female Male
75.12632 73.19792
>
> tapply(survey$Pulse,list(survey$Exer, survey$Sex), mean, na.rm=TRUE)
Female Male
Freq 73.60976 70.67925
None 71.42857 80.50000
Some 77.00000 75.03030
첫번째 코드는 Exer 변수를 기준으로 Pulse의 평균을 계산합니다.
두전째는 Sax 변수를 기준으로 Pulse 변수의 평균을 계산합니다.
Exer 와 Sax 변수를 기준으로 Pulse 변수의 평균을 계산합니다.
결측값은 무시합니다.
> aggregate(survey$Pulse, by=list(Exercise=survey$Exer),
+ FUN=mean, na.rm=TRUE)
Exercise x
1 Freq 71.96842
2 None 76.76471
3 Some 76.18750
>
> aggregate(survey$Pulse, list(Exercise=survey$Exer, Sex=survey$Sex),
+ mean, na.rm=TRUE)
Exercise Sex x
1 Freq Female 73.60976
2 None Female 71.42857
3 Some Female 77.00000
4 Freq Male 70.67925
5 None Male 80.50000
6 Some Male 75.03030
>
> aggregate(survey[c("Pulse", "Age")],
+ list(Exercise=survey$Exer), mean, na.rm=TRUE)
Exercise Pulse Age
1 Freq 71.96842 20.34495
2 None 76.76471 21.47575
3 Some 76.18750 20.13952
위 코드는 aggregate 함수를 이용해 위의 tapply와 같이 통계를 계산합니다.
`tapply`와 `aggregate` 함수는 데이터를 그룹화하고 집계하는 데 사용되는 두 가지 서로 다른 방법입니다. 주요 차이점은 다음과 같습니다:
- `tapply`: `tapply` 함수는 벡터를 기준으로 다른 변수를 그룹화하고 함수를 적용하여 각 그룹에서 결과를 얻습니다. 결과는 벡터 또는 행렬 형태로 반환됩니다.
- `aggregate`: `aggregate` 함수는 데이터 프레임을 기준으로 하나 이상의 변수를 그룹화하고 함수를 적용하여 결과를 데이터 프레임으로 반환합니다.
- `tapply`: `tapply`는 결과를 벡터 또는 행렬 형태로 반환하며, 결과가 원본 데이터와 일치하지 않을 수 있습니다.
- `aggregate`: `aggregate`는 데이터 프레임 형태로 결과를 반환하며, 결과는 그룹화된 데이터의 모든 열과 함께 나타납니다.
- `tapply`: 주로 하나의 변수에 대한 함수를 적용하는 데 사용되며, 여러 변수에 대한 동시 집계를 처리하기에는 적합하지 않습니다.
- `aggregate`: 여러 변수에 대한 동시 집계가 가능하며, 그룹화된 데이터 프레임 내에서 여러 열에 대한 통계량을 계산할 수 있습니다.
- `tapply`: 간단한 벡터의 그룹화와 집계에 적합합니다.
- `aggregate`: 데이터 프레임 내에서 다양한 변수를 복잡하게 그룹화하고 집계할 때 더 유연하게 사용됩니다.
> myStats <- function(x, na.rm=FALSE) {
+ if (na.rm) x <- x[!is.na(x)]
+ n <- length(x)
+ mean <- mean(x)
+ sd <- sd(x)
+ skew <- sum((x-mean)^3/sd^3)/n
+ kurt <- sum((x-mean)^4/sd^4)/n - 3
+ return(c(n=n, mean=mean, sd=sd, skewness=skew, kurtosis=kurt))
+ }
> aggregate(survey[c("Pulse", "Age")],
+ list(Exercise=survey$Exer), myStats, na.rm=TRUE)
Exercise Pulse.n Pulse.mean Pulse.sd Pulse.skewness Pulse.kurtosis Age.n
1 Freq 95.0000000 71.9684211 10.9286395 0.2774886 0.7317689 115.000000
2 None 17.0000000 76.7647059 14.1444751 0.1956839 -0.7859556 24.000000
3 Some 80.0000000 76.1875000 11.6706857 -0.5205707 0.6279567 98.000000
Age.mean Age.sd Age.skewness Age.kurtosis
1 20.344948 6.178162 5.317256 36.419051
2 21.475750 7.060193 2.317821 4.086712
3 20.139520 6.704352 5.686769 38.613827
우선 myStats라는 함수를 정의하고, aggregate 함수를 이용해 survey 데이터에서 Pulse와 Age 변수를 그룹화해, 함수를 적용합니다.
그룹화는 Exercise를 기준으로 적용하였습니다. 결측값은 제외합니다.
> by(survey[c("Pulse", "Age")], INDICES=list(Exercise=survey$Exer), FUN=summary)
Exercise: Freq
Pulse Age
Min. : 40.00 Min. :16.92
1st Qu.: 65.00 1st Qu.:17.62
Median : 71.00 Median :18.50
Mean : 71.97 Mean :20.34
3rd Qu.: 78.00 3rd Qu.:20.33
Max. :104.00 Max. :70.42
NA's :20
---------------------------------------------------------------
Exercise: None
Pulse Age
Min. : 50.00 Min. :16.92
1st Qu.: 68.00 1st Qu.:18.29
Median : 76.00 Median :19.33
Mean : 76.76 Mean :21.48
3rd Qu.: 86.00 3rd Qu.:20.37
Max. :104.00 Max. :43.83
NA's :7
---------------------------------------------------------------
Exercise: Some
Pulse Age
Min. : 35.00 Min. :16.75
1st Qu.: 69.50 1st Qu.:17.52
Median : 76.00 Median :18.54
Mean : 76.19 Mean :20.14
3rd Qu.: 84.25 3rd Qu.:19.67
Max. :100.00 Max. :73.00
NA's :18
by함수를 통해 survey 데이터를 Exercise를 기준으로 그룹화하고, 각 그룹별로 Pulse와 Age 변수의 통계를 계산합니다.
Freq(자주 운동함) 그룹에 통계와
None(전혀 운동하지 않음) 그룹에 대한 통계
Some(가끔 운동함) 그룹에 대한 통계로 나누어져 결과값이 출력되었습니다.
> aggregate(survey[c("Pulse", "Age")], list(Exercise=survey$Exer), summary)
Exercise Pulse.Min. Pulse.1st Qu. Pulse.Median Pulse.Mean Pulse.3rd Qu. Pulse.Max.
1 Freq 40.00000 65.00000 71.00000 71.96842 78.00000 104.00000
2 None 50.00000 68.00000 76.00000 76.76471 86.00000 104.00000
3 Some 35.00000 69.50000 76.00000 76.18750 84.25000 100.00000
Pulse.NA's Age.Min. Age.1st Qu. Age.Median Age.Mean Age.3rd Qu. Age.Max.
1 20.00000 16.91700 17.62500 18.50000 20.34495 20.33300 70.41700
2 7.00000 16.91700 18.29150 19.33350 21.47575 20.37475 43.83300
3 18.00000 16.75000 17.52075 18.54150 20.13952 19.66700 73.00000
aggregate 함수를 통해 그룹화 한뒤 summary 함수를 통해 최솟값, 제1 사분위수, 중앙값 등등.. 결측치 수를 계산합니다. 결과를 확인해보면,
'Freq' 그룹:
'Pulse' 변수에 대한 최솟값, 1사분위수, 중앙값, 평균, 3사분위수, 최댓값 및 결측치 수
'Age' 변수에 대한 최솟값, 1사분위수, 중앙값, 평균, 3사분위수, 최댓값
'None' 그룹:
'Pulse' 변수에 대한 최솟값, 1사분위수, 중앙값, 평균, 3사분위수, 최댓값 및 결측치 수
'Age' 변수에 대한 최솟값, 1사분위수, 중앙값, 평균, 3사분위수, 최댓값
'Some' 그룹:
'Pulse' 변수에 대한 최솟값, 1사분위수, 중앙값, 평균, 3사분위수, 최댓값 및 결측치 수
'Age' 변수에 대한 최솟값, 1사분위수, 중앙값, 평균, 3사분위수, 최댓값
로 나뉠 수 있죠.
> by(survey[c("Pulse", "Age")], list(Exercise=survey$Exer),
+ function(x) sapply(x, myStats, na.rm=TRUE))
Exercise: Freq
Pulse Age
n 95.0000000 115.000000
mean 71.9684211 20.344948
sd 10.9286395 6.178162
skewness 0.2774886 5.317256
kurtosis 0.7317689 36.419051
---------------------------------------------------------------
Exercise: None
Pulse Age
n 17.0000000 24.000000
mean 76.7647059 21.475750
sd 14.1444751 7.060193
skewness 0.1956839 2.317821
kurtosis -0.7859556 4.086712
---------------------------------------------------------------
Exercise: Some
Pulse Age
n 80.0000000 98.000000
mean 76.1875000 20.139520
sd 11.6706857 6.704352
skewness -0.5205707 5.686769
kurtosis 0.6279567 38.613827
`by` 함수를 사용하여 'survey' 데이터 프레임을 'Exer' 변수를 기준으로 그룹화하고, 각 그룹에 대해 'Pulse'와 'Age' 변수에 대한 사용자 정의 함수 `myStats`를 적용합니다. `myStats` 함수는 각 변수에 대한 통계 정보를 계산합니다.
- 'Freq' 그룹:
- 'Pulse' 변수에 대한 통계 정보 (개수, 평균, 표준 편차, 왜도, 첨도)
- 'Age' 변수에 대한 통계 정보
- 'None' 그룹:
- 'Pulse' 변수에 대한 통계 정보
- 'Age' 변수에 대한 통계 정보
- 'Some' 그룹:
- 'Pulse' 변수에 대한 통계 정보
- 'Age' 변수에 대한 통계 정보
> library(psych)
> describeBy(survey[c("Pulse", "Age")], group=list(Exercise=survey$Exer))
Descriptive statistics by group
Exercise: Freq
vars n mean sd median trimmed mad min max range skew kurtosis
Pulse 1 95 71.97 10.93 71.0 71.57 10.38 40.00 104.00 64.0 0.28 0.73
Age 2 115 20.34 6.18 18.5 19.08 1.61 16.92 70.42 53.5 5.32 36.42
se
Pulse 1.12
Age 0.58
---------------------------------------------------------------
Exercise: None
vars n mean sd median trimmed mad min max range skew kurtosis se
Pulse 1 17 76.76 14.14 76.00 76.73 11.86 50.00 104.00 54.00 0.20 -0.79 3.43
Age 2 24 21.48 7.06 19.33 19.80 1.61 16.92 43.83 26.92 2.32 4.09 1.44
---------------------------------------------------------------
Exercise: Some
vars n mean sd median trimmed mad min max range skew kurtosis se
Pulse 1 80 76.19 11.67 76.00 76.66 11.86 35.00 100 65.00 -0.52 0.63 1.30
Age 2 98 20.14 6.70 18.54 18.80 1.54 16.75 73 56.25 5.69 38.61 0.68
우선 psych의 라이브러리를 불러온 뒤,
`describeBy` 함수를 사용하면 그룹화된 데이터에 대한 요약 통계를 쉽게 얻을 수 있습니다. 코드에서 'Pulse'와 'Age' 변수가 'Exer' 변수를 기준으로 그룹화됩니다.
- 'Freq' 그룹:
- 'Pulse' 변수에 대한 통계 정보 (개수, 평균, 표준 편차, 중앙값, 왜도, 첨도, 표준 오차)
- 'Age' 변수에 대한 통계 정보
- 'None' 그룹:
- 'Pulse' 변수에 대한 통계 정보
- 'Age' 변수에 대한 통계 정보
- 'Some' 그룹:
- 'Pulse' 변수에 대한 통계 정보
- 'Age' 변수에 대한 통계 정보
남연우 운동해라.
'🌐 R language' 카테고리의 다른 글
R - 2주차 내용정리 (0) | 2023.10.01 |
---|---|
R - 1주차 내용정리 (0) | 2023.09.16 |
R 언어 - RTOOLS43 설치하기 (0) | 2023.09.14 |
R 스튜디오 인터페이스 설명 (0) | 2023.09.08 |
R STUDIO 설치하기 (0) | 2023.09.08 |