[英]R: How to simulate component score matrix in PCA
我想建立一个PCA仿真,在其中绘制iid正态分布的组件分数来构建矩阵H的不相关列,即这些列应正交
H是nxp,其中n等于个体数,p对应于变量数
然后,H'H将导致一个对角矩阵,其特征值$ \\ lambda_i $作为对角线条目(降序排列)
比方说
n <- 100 # number ob observations
p <- 10 # number of variables
H <- matrix(NA, now = n, ncol = p)
sig <- seq(1.95, 0.15, by = -0.2)
for(i in 1:p){
H[,i] <- rnorm(n, sd = sig[i])
}
结果仅在iid中产生,而在正交列中不产生。
如何通过正态分布生成具有正交列的矩阵H?
您可以使用qr分解来做到这一点:
n <- 100 # number ob observations
p <- 10 # number of variables
H <- matrix(NA, nrow = n, ncol = p)
sig <- seq(1.95, 0.15, by = -0.2)
for(i in 1:p){
H[,i] <- rnorm(n, sd = sig[i])
}
# Generate qr decomposition
decomp <- qr(H)
# return QR decomposed
out <- qr.Q(decomp, complete=TRUE)
现在要检查我们是否具有正交/邻氨基苯甲酸酯,我们可以将输出乘以其转置倍数,看看是否获得了单位矩阵:
out%*%t(out)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1.000000e+00 4.770490e-17 -6.852158e-17 -1.235990e-17 8.673617e-19 -8.803722e-17 -4.943962e-17 -8.500145e-17
[2,] 4.770490e-17 1.000000e+00 -3.295975e-17 -2.645453e-17 -7.806256e-17 1.327063e-16 9.367507e-17 -3.295975e-17
[3,] -6.852158e-17 -3.295975e-17 1.000000e+00 -1.235990e-16 -8.630249e-17 9.194034e-17 -1.153591e-16 9.107298e-17
[4,] -1.235990e-17 -2.645453e-17 -1.235990e-16 1.000000e+00 4.445229e-17 6.483529e-17 1.047339e-16 -2.298509e-17
出于所有目的和目的,对角线等于1,非对角线基本上为零,因此任务得以完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.