저장소

R 정형 데이터 분석_03 본문

교육/빅데이터 청년인재_경희대 R

R 정형 데이터 분석_03

HB HB 2019. 7. 10. 17:04

통계학

:어떤 척도로 측정하느냐

-양적자료 : 가감승제 가능, 의미 유

-연속형 변수 : 비율척도(세상에 존재하는 단위로 측정) / 추정에 쓰이는

-이산형 변수 : 등간척도 / 분류에 쓰이는

-질적자료 : 범주형 자료

-명목척도 / 분류에 쓰이는

-서열척도 / 분류에 쓰이는


----

도수분포표 - 계급, 급감

상대도수분포표

데이터요약 - 차트

분포의 대칭성 - 왜도 첨도

정규분포

표본 추출

가설검정


#숙제

#1)이론적으로 평균(기대값)과 표준편차 

x<-sample(1:6,size=6,replace=F)

x

mean(x)

sd(x)


#2)주사위 10번 던졌을 때

dice1<-sample(1:6,size=10,replace=T)

mean(dice1)

sd(dice1)

#3)1000000번던졌을 때

dice2<-sample(1:6,size=1000000,replace=T)

mean(dice2)

sd(dice2)



##도수분포표 계급과 급간

u<-c(6.5,4.0,7.1,8.3,5.4,7.6,9.0,15.7,16.7,6.4,5.0,8.5,5.7,7.7,7.2,12.4,7.1,5.5,9.7,

4.4,7.0,6.3,8.3,6.9,5.7,7.6,7.9,7.9,6.0,8.2,10.4,9.9,3.9,9.8,8.2,5.6,7.9,6.4,7.4,7.0,13.0,8.7,6.4,6.7,7.4)

length(u)

u.num<-length(u)

u.num^(1/3)

round(u.num^(1/3))


(max(u)-min(u))/4


#floor 내림, 정수로 만들어줌 <->ceilling 내림 / gsub(a,b,c)c에서a로 되어있는 것 b로 바꿔주어라 


u.classnum<-round(u.num^(1/3)) #계급

u.classinterval<-round((max(u)-min(u))/4)  #급간                


u.floor<-floor(min(u))

rest<-ceiling(max(u))%%u.classinterval

supplement<-u.classinterval-rest

u.ceiling<-ifelse(rest==0,ceiling(max(u)),ceiling(max(u)+supplement))


u.cut<-cut(u,breaks = seq(u.floor,u.ceiling,by=u.classinterval),right = F)

u.levels<-gsub(',','~',levels(u.cut))

u.cut<-cut(u,breaks = seq(u.floor,u.ceiling, by=u.classinterval),right = F,labels=u.levels)

u.table<-table(u.cut)


##상대도수분포표 prop.table() / digit(소수점자리)

round(prop.table(u.table),digits=3)*100


#숙제


t<-read.csv('train.csv')

t


mean(t$Survived)

mean(t$Age,na.rm = T)

var(t$Age,na.rm = T)

sd(t$Age,na.rm=T)

y<-t$Survived*t$Age

table(y)

length(y)-424

sum(y,na.rm=T)/467


summary(t)

str(t)

head(t)

boxplot(t$Age)


boxplot(t$Fare)



###데이터 요약


##산점도(산포도)

x<-c(6.5,4.0,7.1,8.3,5.4,7.6,9.0,15.7,16.7,6.4,5.0,8.5,5.7,7.7,7.2,12.4,7.1,5.5,9.7,4.4,7.0,

6.3,8.3,6.9,5.7,7.6,7.9,6.0,8.2,10.4,9.9,3.9,9.8,8.2,5.6,7.9,6.4,7.4,7.0,13.0,8.7,6.4,6.7,7.4)

plot(x)

boxplot(x)

hist(x) #히스토그램, 도수분포표의 결과와 유사

barplot(x)






age<-c(18,21,22,19,34,32,40,42,56,58,64,28,29,36,35)

stem(age) #줄기잎그림 - 도수분포표의 서술적인 면+히스토그램 시각적인 면


#연습

t<-read.csv('train.csv')

str(t)

hist(t$Age)

hist(t$Fare)

hist(t$Pclass)



###분포의 대칭성


##왜도

install.packages('moments')

library(moments)

x<-c(6.5,4.0,7.1,8.3,5.4,7.6,9.0,15.7,16.7,6.4,5.0,8.5,5.7,7.7,7.2,12.4,7.1,5.5,9.7,4.4,7.0,6.3,8.3,6.9,5.7,

7.6,7.9,6.0,8.2,10.4,9.9,3.9,9.8,8.2,5.6,7.9,6.4,7.4,7.0,13.0,8.7,6.4,6.7,7.4)

skewness(x)

stem(x)

kurtosis(x)

plot(density(x)) #확률밀도곡선


#dnorm 누적확률밀도(정규분포만드는)

den.norm<-function(x)dnorm(x,mean=mean(x),sd=sd(x))

curve(den.norm,col='blue',add=T,lty=2)

abline(v=mean(x),col='red',lty=2) #평균수직선 

#해석 : 오른쪽 방향 비대칭 꼬리형태, 첨도가 높다.


head(t)

skewness(t$Age,na.rm = T)

kurtosis(t$Age,na.rm=T)

hist(t$Age)

stem(t$Age)


ta<-na.omit(t$Age)

plot(density(na.omit(t$Age)))

ta.norm<-function(ta)dnorm(ta,mean=mean(ta),sd=sd(ta))

curve(ta.norm,col='red',add=T,lty=1)

abline(v=mean(ta),col='skyblue',lty=4)    



###추론통계 : 표본으로 모집단 추론


##표준정규분포

x<-seq(-5,5,length=1000)

y<-dnorm(x,mean=0,sd=1)

plot(x,y,type='l',lwd=1) #lwd 라인두께


den.norm<-function(x)dnorm(x,mean=0,sd=2)

curve(den.norm,col='red',add=T,lty=2)


da.norm<-function(x)dnorm(x,mean=0,sd=3)

curve(da.norm,col='blue',add=T,lty=4)



##표본추출


#단순임의추출

x<-c(1:10)

sample(x,5) #x에서 5개를 뽑겠다

sample(x,5,replace=T) #replace복원추출


#단순임의추출 -표본 가중치 넣어야 할 때 prob

x<-c('a','b','c','d','e')

prob<-c(6,1,5,1,3)

sample(x,3,replace=T,prob = prob)


#층화추출 strata

install.packages('sampling')

library(sampling)


strata(c('Species'),size=c(2,3,4),method = 'srswor',data=iris)

#srswor:비복원단순임의 / srswr:복원단순임의


#연습 316p 타이타닉 임의추출

ts<-t$Survived

head(ts)


ts1<-sample(ts,891*0.01,replace=F)

ts2<-sample(ts,891*0.1,replace=F)

ts3<-sample(ts,891*0.5,replace=F)


table(ts)

table(ts1)

table(ts2)

table(ts3)


prop.table(table(ts))

prop.table(table(ts1))

prop.table(table(ts2))

prop.table(table(ts3))


#예시

train=read.csv("train.csv",header=T)

surv.rate=function(a,b){

  samplenum=round(a*b*(1/100));

  samplebox=sample(train$Survived,size=samplenum,replace=F);

  k=0;

  for(i in 1:samplenum){

    if(samplebox[i]==1)

      k=k+1;

  }

  (k/samplenum)*100;

}


surv.rate(891,100)

surv.rate(891,50)

surv.rate(891,10)

surv.rate(891,5)


#예시

library(dplyr)


train_0.05 <- sample_frac(train, 0.05)

train_0.1 <- sample_frac(train, 0.01)

train_0.5 <- sample_frac(train, 0.5)


round(prop.table(table(train$Survived)),3)*100

round(prop.table(table(train_0.05$Survived)),3)*100

round(prop.table(table(train_0.1$Survived)),3)*100

round(prop.table(table(train_0.5$Survived)),3)*100



##독립성검정 : 두 변수 사이 상관관계

install.packages('MASS')

library(MASS)


data('survey')

head(survey)

str(survey)


xt=xtabs(~Sex+Exer,data=survey) #xtabs 도수분포표 만드는 함수

xt

chisq.test(xt) #카이제곱


#피셔의 정확 검정

ht=xtabs(~W.Hnd+Clap,data=survey)

chisq.test(ht)

fisher.test(ht)

#카이제곱, 피셔 데이터 테이블 형태 이용


#맥니마검정 : 어떤 사건 전 후 - matrix이용!

per=matrix(c(794,86,150,570),

           nrow=2,

           dimnames=list("1st"=c('Approve','Disapprove'),

                         '2nd'=c('Approve','Disaprove')))

per

mcnemar.test(per)           


#카이제곱검정 : 특정분포 따르는지

xt<-table(survey$W.Hnd)

xt

chisq.test(xt,p=c(0.3,0.7)) #왼손 오른손 비율이 3:7인지 물어보는 것


#샤피로 윌크 검정 : 정규성 확인

#rnorm 난수표 생성

x<-rnorm(1000) #1000개 임의의 수 추출 (소수점 숫자로 만들어짐)

shapiro.test(x)

x


#K-S test : 유의한 차이가 있느냐, 비슷하냐 묻는 검정

ks.test(rnorm(100),rnorm(90))



#연습문제

t$Survived<-as.factor(t$Survived)

str(t$Survived)

xst<-xtabs(~Sex+Survived,data=t)

xvs<-xtabs(~Pclass+Survived,data=t)

xns<-xtabs(~Name+Survived,data=t)


chisq.test(xst) #귀무가설 기각

chisq.test(xvs) #귀무가설 기각

chisq.test(xns) #귀무가설 채택




상관관계 : 선후, 인과 알 수x, 인과관계 밝히기 위한 전 후 관계

인과관계 : 관계 명확히 입증

 

###상관분석

cor(iris$Sepal.Width,iris$Sepal.Length) #-0.117~ 음의 상관관계


#피어슨상관계수

x1<-c(1,3,6,8,10)

x2<-c(-2,3,8,5,9)

cor(x1,x2)


#symnum 상관계수 단순하게 심볼로 표현

x<-iris[,1:4] #모든행과 1열부터 4열까지 추출

head(x)

cor(x)

symnum(cor(x))


#상관관계 시각화



install.packages('corrgram')

library(corrgram)       

corrgram(x)

corrgram(iris,upper.panel = panel.conf) #panel.conf 숫자로도 보여주는 것



#스피어만 상관계수 : 순위 상관계수

kor<-c(85,90,87,92,95)

eng<-c(88,89,68,84,91)

r<-matrix(c(kor,eng),ncol=2)

r

cor(r,method = 'spearman')

cor.test(kor,eng)

cor.test(kor,eng,method='spearman')


Comments