我正在尝试通过使用函数 psych::Principal() 使用训练数据获取 PCA 组件。
> train <- read.csv("mytraindata.csv", header = TRUE)
> train[is.na(train)] <- 0
> train <- sapply(train, as.numeric)
> fit <- principal(train, nfactors = 6, rotate = "promax", missing = TRUE)
现在,我正在尝试减少测试数据的维度。所以,我首先按如下方式加载我的数据:
> test <- read.csv("mytestdata.csv", header = TRUE)
> test[is.na(test)] <- 0
> test <- sapply(test, as.numeric)
当我将它应用于前四行时,我得到一些有效的输出,如下所示:
> sm <- test[1:4,]
> predict(fit, sm)
PC1 PC2 PC3 PC4 PC5 PC6
[1,] 2.208531 -0.5038822 -2.6390489 0.4115814 1.7402972 3.213355
[2,] -4.678453 -0.4528760 0.7745650 -1.2372164 -0.3016823 -2.706421
[3,] -1.864383 -2.6386053 0.6979575 -1.3102945 -1.2105619 -2.833270
[4,] 4.334304 3.5953635 1.1665265 2.1359295 -0.2280531 2.326335
但是,当我在 3 行上应用相同的内容时,它给出的 NaN 如下:
> sm <- test[1:3,]
> predict(fit, sm)
PC1 PC2 PC3 PC4 PC5 PC6
[1,] NaN NaN NaN NaN NaN NaN
[2,] NaN NaN NaN NaN NaN NaN
[3,] NaN NaN NaN NaN NaN NaN
如果我使用训练数据而不是测试数据,我也会得到类似的输出。
我很担心,因为我认为这与使用机器学习模型获得预测的方式相同。请任何人帮助我弄清楚为什么会发生这种情况。