자료, 데이터, 분포
- csv 파일을 열면 열과 행으로 된 표가 존재한다.
- 한 칸, 예를 들면 (1,1)에는 숫자가 들어있다.
- 통계학에서는 이 한 칸을 확률분포라고 생각
특히 다변량분석에서는 기본 확률분포를 정규분포로 생각한다.
- 따라서 파일의 한 줄 = 다변량 정규분포라고 생각.
- 또한 파일 전체 = 행렬 기반 정규분포라고 생각.
다변량분포 생성 (1)
패키지 없이 다변량 정규분포를 만들 수 있을까?
이변량 분포의 조건부 분포를 이용하면 만들 수 있다.
r
## 이변량 데이터 : 패키지 없이
x = rnorm(100) * 2 + 5
y = rnorm(100) * 2 * sqrt(0.91) + 6 + 0.3 * (x-5)
w = cbind(x, y)
hist(w)
다변량분포 생성 (2)
패키지를 이용해서 정규분포를 만들 때는 mvrnorm()을 이용
r
library(MASS)
D = diag(c(1, 2, 0.4))
data = c(1, 0.6, 0.1, 0.6, 1, 0.2, 0.1, 0.2, 1)
rr = matrix(data, nrow=3, byrow=T)
Sigma = D^{1/2} %*% rr %*% D^{1/2}
mu = rep(0, 3)
n = 1000
d1 = mvrnorm(n, mu, Sigma)
r
> class(d1); head(d1); dim(d1)
[1] "matrix" "array"
[,1] [,2] [,3]
[1,] 0.6522633 -0.2662326 -0.12196492
[2,] -0.4167346 -2.9190069 0.38757895
[3,] 0.9592244 0.4103282 0.02670078
[4,] 0.3947418 -0.5466946 -0.45291393
[5,] -0.4258730 0.4858419 -1.09952497
[6,] -1.5334062 -2.1138404 -0.90017967
[1] 1000 3
r
## 출력용 함수 제작
qq_total = function(x){
mu = mean(x); sig = sd(x);
qqplot(x, qnorm(ppoints(n), mean = mu, sd = sig), pch = 19);
qqline(x, distribution = function(p) qnorm(p, sd = sig, mean = mu), col='yellow')
}
## 그림 출력
par(mfrow = c(1,3))
for (i in 1:3)
qq_total(d1[,i])
표준화 자료
r
## 표준화하기
d2 = scale(d1)
class(d1)
class(d2)
df1 = data.frame(d1)
names(df1) = c('X1', 'X2', 'X3')
df2 = data.frame(d2)
names(df2) = c('X1', 'X2', 'X3')
head(d1)
head(d2)
r
> head(d1)
[,1] [,2] [,3]
[1,] 0.6522633 -0.2662326 -0.12196492
[2,] -0.4167346 -2.9190069 0.38757895
[3,] 0.9592244 0.4103282 0.02670078
[4,] 0.3947418 -0.5466946 -0.45291393
[5,] -0.4258730 0.4858419 -1.09952497
[6,] -1.5334062 -2.1138404 -0.90017967
> head(d2)
[,1] [,2] [,3]
[1,] 0.5703100 -0.1990112 -0.16213887
[2,] -0.5090412 -2.1111372 0.64255516
[3,] 0.8802440 0.2886554 0.07264052
[4,] 0.3102944 -0.4011689 -0.68478807
[5,] -0.5182682 0.3430859 -1.70594459
[6,] -1.6365279 -1.5307713 -1.39112974