繁体   English   中英

R:如何在PCA中模拟组件得分矩阵

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM