构造主成分的表达式(综合指标),并做分析test_test <- read.table("D:/R/R Code/5/Chap7/test_score.csv", sep=",", header=T)R <- round(cor(test), 3) <- princomp(test, cor=T)summary(test_PCA, loadings=T)# 找出第一个主成分(PC1)上得分较高的学生test[c(6,7,45,30,49),]# 找出第二个主成分(PC2)上得分较高的学生test[c(26,33,8),]# 获取这些学生在主成分上的得分samplePC <- (round(test_PCA$scores,3))[c(6,7,45,30,49,26,33,8),]rownames(samplePC) <- c(6,7,45,30,49,26,33,8)samplePC# 也可以使用另一种方式获取这些学生在主成分上的得分samplePC2 <- round(predict(test_PCA),3)[c(6,7,45,30,49,26,33,8),]rownames(samplePC2) <- c(6,7,45,30,49,26,33,8)samplePC2
时间: 2023-09-20 22:03:09 浏览: 106
构造主成分的表达式,可以用以下公式:
PC1 = a1 * test1 + a2 * test2 + a3 * test3 + ... + an * testn
PC2 = b1 * test1 + b2 * test2 + b3 * test3 + ... + bn * testn
...
PCn = k1 * test1 + k2 * test2 + k3 * test3 + ... + kn * testn
其中,test1 ~ testn 为原始指标,a1 ~ an,b1 ~ bn,...,k1 ~ kn 为主成分系数。
主成分系数的绝对值越大,说明该原始指标对应的主成分权重越大,即在该主成分上的影响力越大。而主成分得分则是每个个体在主成分上的投影值,反映个体在该主成分上的表现。
在上述代码中,使用了 princomp 函数进行主成分分析,并通过 summary 函数输出了主成分系数和方差贡献率等信息。接着,通过 test_PCA$scores 获取每个学生在主成分上的得分,用 samplePC 和 samplePC2 两种方式获取了特定学生在主成分上的得分。
相关问题
library(splines) library(Matrix) library(fds) library(rainbow) library(MASS) library(pcaPP) library(RCurl) library(fda) library(ggplot2) data<-read.table("D:/CPCI/ECG200/ECG200_TEST.txt") data <- data[, -1] #导入数据的时候第一列是当时已经分好的类,不需要 #######定义了一个计算函数型数据马氏距离的函数 Ma_distance <-function(data,M,H,param){ ###data:导入数据;M:B样条基个数;H:主成分个数;param:控制平滑程度 knee= t(data) t=ncol(data) #使用前需要把data转置 #调参 time = seq(0,1,len=t) smoothing.parameter = param #控制平滑程度(原来是1e-15 Lfdobj = int2Lfd(2) kneebasis = create.bspline.basis(nbasis=M) #选择多少个B样条基(原来给的是20个 kneefdPar = fdPar(kneebasis, Lfdobj, smoothing.parameter) knee.fd = smooth.basis(time, knee, kneefdPar) kn.pcastr = pca.fd(knee.fd$fd, H, kneefdPar,centerfns=TRUE) kneescores = kn.pcastr$scores ##主成分得分 lambda = kn.pcastr$varprop #lambda a=nrow(data) #获取样本个数 b=ncol(kneescores) #获取主成分个数 Mdis=matrix(0,nrow = a,ncol = a) for (i in 1:a) { for (j in 1:a) { l = as.matrix(kneescores[i,]-kneescores[j,]) #主成分得分的第i行-第J行,两个主成分得分向量相减得到的向量 dim(l) = c(1,H) #将向量l的维度由(1,t)设置为(1,H) b = 1/lambda #lambda的向量,维度为(1,H) dim(b)=c(H,1) #将向量lambda的维度改成(1,H) Mdis[i,j]=sqrt((l^2)%*%b) #矩乘 } } return(Mdis) } write.csv (Mdis, file ="D:/CPCI/D.csv")
这段代码定义了一个计算函数型数据马氏距离的函数 `Ma_distance`,并将计算结果保存到了 `Mdis` 变量中,但是在代码中并没有给出 `data` 变量的具体内容,所以无法直接运行。不过,根据代码的结构和函数的定义,可以看出 `data` 变量应该是一个数据框,其中每列都是一个函数的取值,每行是一个样本。另外,函数的参数 `M` 表示 B 样条基的个数,`H` 表示要保留的主成分个数,`param` 表示控制平滑程度的参数。函数的输出是一个矩阵,表示样本之间的马氏距离。在函数内部,首先使用 B 样条基平滑每个函数,并对平滑后的函数进行主成分分析,得到每个样本的主成分得分。然后计算每两个样本之间的马氏距离。
找出几个(至少两个)典型学生,并分析这些学生的成绩与主成分系数的关系。test<-read.table("D:/R/R Code/5/Chap7/test_score.csv", sep=",", header=T) (R<-round(cor(test), 3)) # sample correlation matrix test_PCA<-princomp(test, cor=T) # sample PCA summary(test_PCA, loadings=T) test[c(6,7,45,30,49),] # typical students for the first PC test[c(26,33,8),] # typical students for the second PC # sample principal components of the typical students samplePC<-(round(test_PCA$scores,3))[c(6,7,45,30,49,26,33,8),] rownames(samplePC)<-c(6,7,45,30,49,26,33,8) samplePC # another way to obtain the sample principal components samplePC2<-round(predict(test_PCA),3) [c(6,7,45,30,49,26,33,8),] rownames(samplePC2)<-c(6,7,45,30,49,26,33,8) samplePC2 screeplot (test_PCA, type="lines") # scree graph ### Canonical correlation health<-read.table("D:/R/R Code/5/Chap7/health.csv",sep=",", header=T) (R<-round(cor(health),3)) R11=R[1:3,1:3] R12=R[1:3,4:6] R21=R[4:6,1:3] R22=R[4:6,4:6] A<-solve(R11)%%R12%%solve(R22)%*%R21 # matrix for the first group Y1,Y2,Y3 ev<-eigen(A)$values # common eigenvalues of both groups round(sqrt(ev),3) # the canonical correlations health.std=scale(health) # standardize the original data ca=cancor(health.std[,1:3],health.std[,4:6]) # canonical correlation analysis via R ca$cor # canonical correlations ca$xcoef # the loadings (coefficients) of the first group ca$ycoef # the loadings (coefficients) of the second group
根据代码中输出的 samplePC 和 samplePC2,我们可以找出一些典型学生,比如学生 6、7、45 和 49 在第一主成分上的得分比较高,而学生 26、33 和 8 在第二主成分上的得分比较高。
我们可以进一步分析这些典型学生的成绩与主成分系数的关系。比如,对于学生 6,在第一主成分上得分较高,我们可以查看他的具体成绩和每个指标在第一主成分上的系数。如果某个指标在第一主成分上的系数较大,说明该指标对于该学生在第一主成分上得高分有较大的贡献。类似地,我们也可以分析其他典型学生在不同主成分上的得分与指标之间的关系。
需要注意的是,主成分分析得到的主成分系数是标准化后的系数,需要通过还原公式将其转化为原始指标上的系数,才能进行实际的解释和分析。
阅读全文
相关推荐










