본문 바로가기
@ 통계 교양/통계의 오류,역설, 거짓말

그래프를 꼭 그려봐야 하는 이유(엔스콤의 사인방)

by bigpicture 2019. 12. 1.
반응형

이 그룹들의 통계량이 같다고??? (엔스컴의 사인방)




973년, 엔스컴은 "Graphs in Statistical Analysis"라는 제목의  논문을 출간합니다. SPSS가 1968년에 펀치카드 형식으로 처음 등장했고, 엑셀이 1987에 처음 등장했습니다. 엔스컴이 논문을 게재한 1973년은 오늘날처럼 그래프를 클릭 몇번으로 그릴 수 있는 시대는 아니었을 겁니다. 논문의 서두에는 이런 이야기가 있습니다. 


"출간되는 대부분의 책들과 대부분의 프로그램들은 그래프에 너무 신경을 쓰지 않는다. 우리 중 대다수는 아래와 같은 사상에 주입당했다."


(1) 수치계산은 정확하지만 그래프는 거칠다(대충이다,상세하지 않다). 

(2) 어떤 데이터의 정확한 통계분석에는 오직 한 세트의 계산이 존재한다. 

(3) 데이터를 실제로 보는 것은 속임수(cheat)인 반면, 복잡한 계산은 항상 고결하다. 


엔스콤의 사인방은 데이터시각화의 중요성을 강조하기 위해 엔스콤이 만든 네 그룹의 데이터입니다. 각 그룹의 데이터는 11개의 (x,y) 쌍 데이터로 구성되어 있습니다. 


#anscombe's quartet

#data

Group1_x=c(10.0,8.0,13.0,9.0,11.0,14.0,6.0,4.0,12.0,7.0,5.0)

Group1_y=c(8.04,6.95,7.58,8.81,8.33,9.96,7.24,4.26,10.84,4.82,5.68)


Group2_x=c(10.0,8.0,13.0,9.0,11.0,14.0,6.0,4.0,12.0,7.0,5.0)

Group2_y=c(9.14,8.14,8.74,8.77,9.26,8.10,6.13,3.10,9.13,7.26,4.74)


Group3_x=c(10.0,8.0,13.0,9.0,11.0,14.0,6.0,4.0,12.0,7.0,5.0)

Group3_y=c(7.46,6.77,12.74,7.11,7.81,8.84,6.08,5.39,8.15,6.42,5.73)


Group4_x=c(8.0,8.0,8.0,8.0,8.0,8.0,8.0,19.0,8.0,8.0,8.0)

Group4_y=c(6.58,5.76,7.71,8.84,8.47,7.04,5.25,12.50,5.56,7.91,6.89)


네 그룹의 평균,표준편차,상관계수,선형회귀식이 같습니다. 


먼저 평균과 표준편차를 계산해 봅시다. 막대그래프를 그렸습니다. 





각 그룹 x,y 데이터의 평균과 표준편차가 같습니다. 


이번에는 상관계수, 회귀직선의 상수항과 기울기 구해봅시다. 



네 그룹의 상관계수와 선형회귀식이 같다는 것을 알 수 있습니다. 이 결과들만 본다면 네 데이터가 비슷해보입니다. 


이번에는 산점도그래프를 그려봅시다. 



네 그룹의 산점도가 다르다는 것을 알 수 있습니다. 전혀 다른 분포를 갖는 데이터들의 통계량이 같을 수 있다는 것을 보여줍니다. 엔스콤은 이 데이터를 근거로 하여 시각화의 중요성을 주장하였습니다. 


> 전체 코드


#anscombe's quartet

#data

Group1_x=c(10.0,8.0,13.0,9.0,11.0,14.0,6.0,4.0,12.0,7.0,5.0)

Group1_y=c(8.04,6.95,7.58,8.81,8.33,9.96,7.24,4.26,10.84,4.82,5.68)


Group2_x=c(10.0,8.0,13.0,9.0,11.0,14.0,6.0,4.0,12.0,7.0,5.0)

Group2_y=c(9.14,8.14,8.74,8.77,9.26,8.10,6.13,3.10,9.13,7.26,4.74)


Group3_x=c(10.0,8.0,13.0,9.0,11.0,14.0,6.0,4.0,12.0,7.0,5.0)

Group3_y=c(7.46,6.77,12.74,7.11,7.81,8.84,6.08,5.39,8.15,6.42,5.73)


Group4_x=c(8.0,8.0,8.0,8.0,8.0,8.0,8.0,19.0,8.0,8.0,8.0)

Group4_y=c(6.58,5.76,7.71,8.84,8.47,7.04,5.25,12.50,5.56,7.91,6.89)


DF_Group_x=data.frame(Group1_x,Group2_x,Group3_x,Group4_x)

DF_Group_y=data.frame(Group1_y,Group2_y,Group3_y,Group4_y)



#mean and std

par(mfrow=c(2,2))

barplot(apply(DF_Group_x,2,mean),ylim=c(0,10),main="Mean of x")

barplot(apply(DF_Group_x,2,sd),ylim=c(0,10),main="Std of x")

barplot(apply(DF_Group_y,2,mean),ylim=c(0,10),main="Mean of y")

barplot(apply(DF_Group_y,2,sd),ylim=c(0,10),main="Std of y")

box("outer",col="black")


##correlation analysis

G1_cor=cor.test(Group1_x,Group1_y)$estimate

G2_cor=cor.test(Group2_x,Group2_y)$estimate

G3_cor=cor.test(Group3_x,Group3_y)$estimate

G4_cor=cor.test(Group3_x,Group3_y)$estimate


##regression analyis

G1_lm=lm(Group1_y~Group1_x)

G2_lm=lm(Group2_y~Group2_x)

G3_lm=lm(Group3_y~Group3_x)

G4_lm=lm(Group4_y~Group4_x)


##correlation & regression analysis print

par(mar=c(0.1,0.1,0.1,0.1))

plot(0,type="n",xlim=c(0,7),ylim=c(0.5,4.5),ann=FALSE,axes=FALSE)

box("outer",col="black")

text(1,4,paste0("G1_cor= ",round(G1_cor,2)),cex=1.3)

text(1,3,paste0("G2_cor= ",round(G2_cor,2)),cex=1.3)

text(1,2,paste0("G3_cor= ",round(G3_cor,2)),cex=1.3)

text(1,1,paste0("G4_cor= ",round(G4_cor,2)),cex=1.3)


text(3.2,4,paste0("G1_lm","_intercept= ",round(G1_lm$coefficients[1],2)),cex=1.3,col="red")

text(3.2,3,paste0("G2_cor","_intercept= ",round(G1_lm$coefficients[1],2)),cex=1.3,col="red")

text(3.2,2,paste0("G3_cor","_intercept= ",round(G1_lm$coefficients[1],2)),cex=1.3,col="red")

text(3.2,1,paste0("G4_cor","_intercept= ",round(G1_lm$coefficients[1],2)),cex=1.3,col="red")


text(5.5,4,paste0("G1_lm","_slope= ",round(G1_lm$coefficients[2],2)),cex=1.3,col="blue")

text(5.5,3,paste0("G2_cor","_slope= ",round(G1_lm$coefficients[2],2)),cex=1.3,col="blue")

text(5.5,2,paste0("G3_cor","_slope= ",round(G1_lm$coefficients[2],2)),cex=1.3,col="blue")

text(5.5,1,paste0("G4_cor","_slope= ",round(G1_lm$coefficients[2],2)),cex=1.3,col="blue")


##scatter plot

par(mfrow=c(2,2))

plot(Group1_x,Group1_y,col=rainbow(4)[1],pch=16,main="group1",xlab="x",ylab="y",xlim=c(0,20),ylim=c(0,14))

plot(Group2_x,Group2_y,col=rainbow(4)[2],pch=16,main="group2",xlab="x",ylab="y",xlim=c(0,20),ylim=c(0,14))

plot(Group3_x,Group3_y,col=rainbow(4)[3],pch=16,main="group3",xlab="x",ylab="y",xlim=c(0,20),ylim=c(0,14))

plot(Group4_x,Group4_y,col=rainbow(4)[4],pch=16,main="group4",xlab="x",ylab="y",xlim=c(0,20),ylim=c(0,14))

box("outer",col="black")




반응형

댓글