1부터 100까지의 값을 갖는 100개의 자료로 분위수 계산
num <- 1:100
quantile(num)
## 0% 25% 50% 75% 100%
## 1.00 25.75 50.50 75.25 100.00
quantile(0:100)
## 0% 25% 50% 75% 100%
## 0 25 50 75 100
quantile(num, prob=c(0.05,0.1,0.9,0.95))
## 5% 10% 90% 95%
## 5.95 10.90 90.10 95.05
BMI자료에서 키에 대한 5%, 10%, 25%, 50%, 75%, 90%, 95% 백분위수는
bmi <- read.table("D://KNOU//3-2//RFundamental//bmi.txt",header=TRUE)
quantile(bmi$height,c(0.05,0.10,0.25,0.50,0.75,0.90,0.95))
## 5% 10% 25% 50% 75% 90% 95%
## 153.0 155.0 158.0 162.0 165.0 168.4 172.2
산술평균과 절삭 평균 - n개의 자료의 중심에 대한 척도로 사용하는 값들로 평균이나 절삭평균을 사용 - 평균은 이상치에 민감하게 반응하므로 이에 대한 보정으로 절삭평균을 사용 mean(x, trim=0, na.rm…..) trim은 절삭평균을 계산할때 절삭할 비율을 설정.
1부터 100가지의 수와 1000이 포함된 101개의 자료에 대해서
x <- c(1:100)
x <- union(x,c(100000,-100))
mean(x)
## [1] 1028.922
mean(x,trim=0.05)
## [1] 50.5
BMI자료에서 여자의 몸무계의 평균과 5%절삭 평균 구하기
mean(bmi[,bmi$gener=="F"])
## Warning in mean.default(bmi[, bmi$gener == "F"]): argument is not numeric
## or logical: returning NA
## [1] NA
mean(bmi[bmi[,5]=="F",2])
## [1] 51.87342
median(bmi[bmi[,5]=="F",2])
## [1] 52
mean(bmi[bmi$gender=="F",]$weight,trim=0.05)
## [1] 51.81944
평균 절삭은 median등과 비교하여 현격한 차이가 있다고 판단할때 적용할 수 있을것 같다. 위의 경우에는 절삭하지 않은 평균과 median과의 차이가 거의 없으므로 굳이 절삭할 필요는 없다.
중앙값(median) 1부터 100가지의 수와 1000이 포함된 101개의 자료의 중앙값
x <- c(1:100,1000)
median(x)
## [1] 51
y <- c(x,NA)
median(y)
## [1] NA
median(y,na.rm=TRUE)
## [1] 51
BMI의 키의 중앙값.
median(bmi$height)
## [1] 162
quantile(bmi$height,probs=0.5)
## 50%
## 162
분산과 표준편차
sd(bmi$height, na.rm=FALSE) #표준편차
## [1] 5.472746
var(bmi$height, na.rm=FALSE) #분산
## [1] 29.95095
sd(bmi$height, na.rm=FALSE) ^ 2
## [1] 29.95095
sqrt(var(bmi$height, na.rm=FALSE))
## [1] 5.472746
범위및 최대,최소
range(bmi$height) #전체 키의 범위
## [1] 150 180
range(bmi[bmi$gender=='M',]$height) #남자키의 범위
## [1] 160 180
max(bmi$height)
## [1] 180
min(bmi$height)
## [1] 150
IQR(bmi$weight) #4분위수범위 inter quatile range 3q - 1q
## [1] 8
quantile(bmi$weight)
## 0% 25% 50% 75% 100%
## 40 49 52 57 80
자료의 흩어짐에 대한 측도 상관계수와 공분산 상관계수는 보통 피어슨(Pearson)의 선형상관계수를 말하며 표본에서 얻은 상관 계수는 r로 표시 상관계수는 cor, 공분산은 cov 함수 이용
cov(bmi$height,bmi$weight)
## [1] 25.42062
cor(bmi$height,bmi$weight) #1에 가까울수록 강한 상관관계
## [1] 0.6473976
표준정규분포로부터 100개씩 난수를 얻어 이를 행렬에 저장하고 이의 상관계수를 계산하기
x <- cbind(rnorm(100),rnorm(100))
cor(x)
## [,1] [,2]
## [1,] 1.00000000 0.04254957
## [2,] 0.04254957 1.00000000
도수분포표와 교차표 table함수는 매개변수가 한개이면 도수분포표를 둘이상이면 교차표를 출력하는 함수이다.
table(bmi$gender)
##
## F M
## 158 19
table(bmi$gender, bmi$marriage)
##
## N Y
## F 126 32
## M 7 12
table(bmi$gender, bmi$marriage, bmi$religion)
## , , = Bu
##
##
## N Y
## F 17 1
## M 1 2
##
## , , = C1
##
##
## N Y
## F 34 11
## M 2 0
##
## , , = C2
##
##
## N Y
## F 23 10
## M 0 8
##
## , , = No
##
##
## N Y
## F 52 10
## M 4 2
table(bmi$gender, bmi$religion, exclude = 'No', dnn=c("성별","종교"))
## 종교
## 성별 Bu C1 C2
## F 18 45 33
## M 3 2 8
3차원 이상일 경우에는 ftable(Frequency Table)이 보다 유용하다.
ftable(religion~gender,data=bmi)
## religion Bu C1 C2 No
## gender
## F 18 45 33 62
## M 3 2 8 6
ftable(bmi[,4:6],row.vars = 2)
## religion Bu C1 C2 No
## marriage N Y N Y N Y N Y
## gender
## F 17 1 34 11 23 10 52 10
## M 1 2 2 0 0 8 4 2
ftable(bmi[,4:6],row.vars = "gender")
## religion Bu C1 C2 No
## marriage N Y N Y N Y N Y
## gender
## F 17 1 34 11 23 10 52 10
## M 1 2 2 0 0 8 4 2
상대도수값을 얻고자 할때는 prop.table함수 사용
prop.table(table(bmi$gender,bmi$religion))
##
## Bu C1 C2 No
## F 0.10169492 0.25423729 0.18644068 0.35028249
## M 0.01694915 0.01129944 0.04519774 0.03389831
prop.table(table(bmi$gender,bmi$religion),margin = 1) #행별로 합계1로 하는 경우
##
## Bu C1 C2 No
## F 0.1139241 0.2848101 0.2088608 0.3924051
## M 0.1578947 0.1052632 0.4210526 0.3157895
table,ftalbe등의 함수는 행/열의 합을 제공하지 않음 addmargins함수로 sum 구할수 있음
addmargins(table(bmi$gender,bmi$religion))
##
## Bu C1 C2 No Sum
## F 18 45 33 62 158
## M 3 2 8 6 19
## Sum 21 47 41 68 177
addmargins(prop.table(table(bmi$gender,bmi$religion)))
##
## Bu C1 C2 No Sum
## F 0.10169492 0.25423729 0.18644068 0.35028249 0.89265537
## M 0.01694915 0.01129944 0.04519774 0.03389831 0.10734463
## Sum 0.11864407 0.26553672 0.23163842 0.38418079 1.00000000