1 Data Sample #
use tempdb
go
if object_id('dbo.pc') is not null
drop table dbo.pc;
create table dbo.pc(
학생 varchar(20)
, 국어 int
, 영어 int
, 수학 int
);
insert dbo.pc values('A', 1, 2, 3);
insert dbo.pc values('B', 2, 1, 2);
insert dbo.pc values('C', 3, 3, 1);
insert dbo.pc values('D', 4, 5, 5);
insert dbo.pc values('E', 5, 4, 4);
4 종합순위 #
영어 <- c(85,30,40,75,55,55,70,30)
수학 <- c(60,40,30,60,45, 65,40,20)
d <- data.frame(영어,수학)
head(d)
p <- princomp(d) #prcomp:고유벡터이용, princomp:특이값 분해이용
summary(p)
biplot(p)
plot(p)
> p
Call:
princomp(x = d)
Standard deviations:
Comp.1 Comp.2
22.746992 8.736382
2 variables and 8 observations.
> summary(p)
Importance of components:
Comp.1 Comp.2
Standard deviation 22.7469916 8.7363823
Proportion of Variance 0.8714537 0.1285463
Cumulative Proportion 0.8714537 1.0000000
> p$loadings [1:2, 1:2]
Comp.1 Comp.2
영어 -0.8228691 0.5682310
수학 -0.5682310 -0.8228691
> p$scores
Comp.1 Comp.2
[1,] -33.209538 4.7038937
[2,] 23.412882 -10.0914296
[3,] 20.866501 3.8195713
[4,] -24.980847 -0.9784163
[5,] 0.000000 0.0000000
[6,] -11.364620 -16.4573817
[7,] -9.501881 12.6378104
[8,] 34.777502 6.3659521
> #최종점수
> p$scores[,1] * -1
[1] 33.209538 -23.412882 -20.866501 24.980847 0.000000 11.364620
[7] 9.501881 -34.777502
- 주성분분석의 Score의 부호가 반대다. 그래서 -1을 곱해줬다.
- 첫번째 학생의 주성분 점수를 계산하면 (-0.822869 * (85-55) + -0.5682310 * (60-45)) * -1 다.
단계를 밟아가면..
영어 <- c(85,30,40,75,55,55,70,30)
수학 <- c(60,40,30,60,45, 65,40,20)
d <- data.frame(영어,수학)
cov.mat <- cov.wt(d, cor=TRUE)$cov
e.vec <- eigen(cor.mat)$vectors
comp1 <- e.vec[1,1]*(영어 - mean(영어)) + e.vec[2,1]*(수학 - mean(수학))
comp2 <- e.vec[1,2]*(영어 - mean(영어)) + e.vec[2,2]*(수학 - mean(수학))