_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈 |
FrontPage › Histogram
|
|
[edit]
2 겹쳐그리기 #rgb()로 rgb(red, green, blue, alpha ..) 색깔, 투명도를 조정한다.
hist(iris[iris$Species =="setosa", 1], col="grey", xlim=range(iris$Sepal.Length), ylim=c(0,25)) hist(iris[iris$Species =="versicolor", 1], col=rgb(1, 0, 0, 0.5), add=TRUE) hist(iris[iris$Species =="virginica", 1], col=rgb(0, 1, 0, 0.5), add=TRUE) ![]() [edit]
3 hist함수에 boxplot 추가하기 #hist(iris$Sepal.Length) sfsmisc::histBxp(iris$Sepal.Length) ![]() library(packHV) hist_boxplot(iris$Sepal.Length) ![]() [edit]
4 hist함수에 line 추가하기 #방법: https://cran.r-project.org/doc/contrib/Lemon-kickstart/kr_adlin.html
rescale<-function(x,newrange) { if(nargs() > 1 && is.numeric(x) && is.numeric(newrange)) { # if newrange has max first, reverse it if(newrange[1] > newrange[2]) { newmin<-newrange[2] newrange[2]<-newrange[1] newrange[1]<-newmin } xrange<-range(x) if(xrange[1] == xrange[2]) stop("can't rescale a constant vector!") mfac<-(newrange[2]-newrange[1])/(xrange[2]-xrange[1]) invisible(newrange[1]+(x-xrange[1])*mfac) } else { cat("Usage: rescale(x,newrange)\n") cat("\twhere x is a numeric object and newrange is the min and max of the new range\n") } } set.seed(1) val1 <- rnorm(50) set.seed(100) val2 <- rnorm(100) + 5 val <- c(val1, val2) h <- hist(val) plot(h) lines(rescale(spline(h$counts)$x, range(h$mids)), spline(h$counts)$y) ![]() [edit]
6 도수분포표(히스토그램) #어떤 데이터가 전체 중에 차지하는 위치를 알아내기 위해서는 전체 경향을 파악하는 일이 매우 중요하다. 전체 경향을 파악하는데는 도수분포표가 매우 유용하다. 도수분포표는 다음과 같은 방법으로 만들 수 있다.
[edit]
7 스튜아지스 방법 #
DECLARE @k int , @r bigint , @avg bigint , @sigma bigint , @min bigint , @max bigint , @cnt int , @min_real bigint , @max_real bigint --1 + (LOG10(N) / LOG10(2)) SELECT @sigma = STDEV(Score) , @avg = AVG(Score) , @min_real = MIN(Score) , @max_real = MAX(Score) FROM #Score -- 이상치 제거후 구간을 구한다.: 평균 - (1.5 * 표준편차) ~ 평균 + (1.5 * 표준편차) SELECT @r = (MAX(Score) - MIN(Score)) / (1 + (LOG10(COUNT(*)) / LOG10(2))) , @k = (1 + (LOG10(COUNT(*)) / LOG10(2))) , @cnt = COUNT(*) , @min = MIN(Score) , @max = MAX(Score) FROM #Score WHERE Score > @avg - (3 * @sigma) AND Score < @avg + (3 * @sigma) ;WITH Dumy(Seq) AS ( SELECT 1 Seq UNION ALL SELECT Seq + 1 FROM Dumy WHERE Seq + 1 <= @k ), Grade AS ( SELECT (@k - Seq ) + 1 Grade , @min + ((Seq-1) * @r) BeginScore , @min + (Seq * @r) EndScore FROM Dumy ), RealGrade AS ( SELECT Grade, BeginScore, EndScore FROM Grade UNION ALL SELECT Grade + 1, @min_real, EndScore + 1 FROM Grade WHERE Grade = (SELECT MAX(Grade) FROM Grade) UNION ALL SELECT Grade - 1, BeginScore + 1, @max_real FROM Grade WHERE Grade = (SELECT MIN(Grade) FROM Grade) ) SELECT B.Grade , COUNT(*) AccountCnt , SUM(NetAMT) NetAMT FROM #Score A INNER JOIN RealGrade B ON A.Score BETWEEN B.BeginScore AND B.EndScore GROUP BY B.Grade ORDER BY 1 [edit]
8 표준편차를 이용하는 방법 #표준편차를 이용하면 단순히 우수, 보통, 취약 이렇게 3개의 그룹으로 나눌 수 있다. 예를 들어, 50명이 정원인 한 학급에서 학생들의 키에 대한 평균치가 170Cm이고, 표준편차가 7Cm였을 때에 다음과 같이 나뉠 수 있다. (σ[2]: 표준편차, μ[3]: 평균)
![]() 참고로 '6시그마'의 시그마는 위의 그림과 같은 뜻을 내포하고 있다. 6시그마는 (μ - 6σ) ~ (μ + 6σ)의 구간을 뜻을 나타낸다.
[edit]
9 5단계 평가 #위의 정규분포에서 다음과 같이 5개의 구간으로 나눌 수도 있다.
[edit]
11 R을 이용한 히스토그램 #x <- rnorm(100) xnm <- "정규분포" hist(x, labels=TRUE, main = paste("Histogram of" , xnm), xlab = xnm) ![]() x <- rnorm(1000) hist(x, probability=T) lines(density(x)) ![]() [edit]
12 그룹별로 #install.packages("sm") library("sm") y <- c(1,2,3) levels(x9$lf_group) <- c("group1", "group2", "group3") sm.density.compare(x9$frd_cnt, x9$lf_group) legend("topright", levels(x9$lf_group), fill=2+(0:nlevels(x9$lf_group))) library("ggplot2") diamonds_small <- diamonds[sample(nrow(diamonds), 1000), ] ggplot(diamonds_small, aes(depth, fill = cut)) + geom_density(alpha = 0.2) + xlim(55, 70) ![]() |
노력은 계획으로부터 성취되고 오만으로부터 무너진다. (관자) |