使用missMDA处理含缺失值的PCA时遇类型转换错误求助
含缺失值数据集的PCA分析报错解决方法
问题场景
使用missMDA包对含缺失值的数据集做PCA分析时,运行以下代码出现错误:
# 加载包 library(tidyverse) library(missMDA) # 数据集 df <- structure(list( A = c(39.64, 39.23, 38.89, 38.63, 38.44, 38.32, 38.27, 38.3, 38.4, 38.56, 38.79, 39.06, 39.36, 39.68, 40.01, 40.34, 40.68, 41.05, 41.46, 41.93, 42.48, 43.14, 43.92, 44.84, 45.9, 47.1, 48.4, 49.78, 51.2, 52.62, 54.01, 55.31, 56.52, 57.6, 58.54, 59.33, 59.98, 60.46, 60.78, 60.94, 60.92, 60.71, 60.3, 59.69, 58.87, 57.86, 56.67, 55.33, 53.87, 52.33, 50.75), B = c(3.29, 3.29, 3.3, 3.32, 3.33, 3.35, 3.36, 3.38, 3.4, 3.42, 3.44, 3.46, 3.48, 3.5, 3.52, 3.53, 3.54, 3.55, 3.55, 3.54, 3.53, 3.51, 3.48, 3.44, 3.4, 3.35, 3.3, 3.24, 3.18, 3.12, 3.07, 3.02, 2.98, 2.96, 2.94, 2.94, 2.95, 2.98, 3.02, 3.08, 3.14, 3.22, 3.3, 3.4, 3.49, 3.59, 3.7, 3.8, 3.91, 4.02, 4.12), C = c(NA, NA, NA, NA, NA, NA, NA, NA, 12.23, 4.3, 3.44, 3.49, 5.59, 0.76, 4.2, 4.61, 4.6, 8.03, 4.26, 3.31, 4.16, 0.37, -2.17, -1.93, -3.7, -0.48, -4.63, -2.89, -4.29, -2.35, -2.27, -1.66, -2.82, -3.2, -2.55, -0.9, -2.42, -0.84, -1.46, -5.39, -2.57, -2.12, -0.59, 1.75, 3.7, 0.99, -3.28, -3.2, -0.6, -0.61, -1.94)), class = "data.frame", row.names = c(NA, -51L)) # 估计维度数 pcaDim <- estim_ncpPCA(X = df, method.cv = "Kfold") # 运行PCA pca <- imputePCA(X = df, ncp = pcaDim)
报错信息:
Error in imputePCA(X = df, ncp = pcaDim) :
'list' object cannot be coerced to type 'double'
尝试用unlist转换数据集类型,并未解决问题。
报错原因
estim_ncpPCA()函数返回的是一个列表对象,包含交叉验证结果、推荐维度数等多项信息;而imputePCA()的ncp参数要求传入具体的数值(即推荐的主成分维度数),直接传入整个列表就会触发类型不匹配的错误。
解决方法
从pcaDim列表中提取ncp对应的数值,作为imputePCA的参数,代码如下:
# 估计维度数 pcaDim <- estim_ncpPCA(X = df, method.cv = "Kfold") # 运行PCA:提取pcaDim中的ncp数值 pca <- imputePCA(X = df, ncp = pcaDim$ncp)
运行上述修正后的代码即可正常完成含缺失值的PCA分析与缺失值填补。
内容的提问来源于stack exchange,提问作者tnt
相关产品推荐
相关产品推荐

