【问题标题】:Why doesn't my PCA work? [duplicate]为什么我的 PCA 不起作用? [复制]
【发布时间】:2015-03-13 00:00:22
【问题描述】:

我有一个包含 200 行和 20 列的数据集,我想在 R 中使用 prcomp() 执行 PCA。但这不起作用,因为当我执行 str(x) 时,我的第一列被列为整数。第一列的数字介于 0 和 4 之间,表示用于获取我的数据集的加热类型。所以这也必须在 PCA 中使用,因为我知道加热类型对其他 19 列有影响,但我无法启动 PCA,因为它被列为整数。我该如何解决这个问题?

该列包含重要信息,我也想使用此信息,但我不能,因为它被列为整数而不是数字,当我尝试 as.numeric() 时,它显示"Error: (list) object cannot be coerced to type 'double'"

我用

解决了
dat_test$heating<-as.numeric(as.character(dat_test$heating))
str(dat_test)

但是我的 PCR 还是不行。

data.prcomp<-prcomp(dat_test,scale.=TRUE,na.rm=TRUE)

返回

Error in svd(x, nu = 0) : infinite or missing values in 'x'

我总共有 2 个 NA 值。这应该仍然适用于na.rmna.action=na.omit,但它没有。

【问题讨论】:

  • 你看过这个讨论吗? stackoverflow.com/questions/12078291/…我认为通过对您问题的第一部分的编辑,这可能是重复的。
  • @LJW 抱歉...我找到了您在上面引用的帖子,除了我自己的搜索之外没有任何其他内容。我很高兴看到它得到了证实。干杯。

标签: r pca


【解决方案1】:

好吧,我知道你在调查什么。一些分层建模似乎很普遍。所以 prcomp 没有 na.rm 参数。该函数为此使用 na.action。

因此,在研究了这个特定的解决方案之后——稍等片刻——站在 Giants 的肩膀上,我发现了这个。我认为它可以为你工作。我还建议您更深入地研究您正在尝试的方法。搜索会发现比你所知道的更多。干杯。

prcomp(na.omit(dat_test), scale = TRUE)

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2013-06-20
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多