R 정형 데이터 분석_03
통계학
:어떤 척도로 측정하느냐
-양적자료 : 가감승제 가능, 의미 유
-연속형 변수 : 비율척도(세상에 존재하는 단위로 측정) / 추정에 쓰이는
-이산형 변수 : 등간척도 / 분류에 쓰이는
-질적자료 : 범주형 자료
-명목척도 / 분류에 쓰이는
-서열척도 / 분류에 쓰이는
----
도수분포표 - 계급, 급감
상대도수분포표
데이터요약 - 차트
분포의 대칭성 - 왜도 첨도
정규분포
표본 추출
가설검정
#숙제 #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') |