1

我有一个数据矩阵(900 列和 5000 行),我想对其进行 pca ..

该矩阵在 excel 中看起来非常好(意味着所有值都是定量的),但是在我在 R 中读取我的文件并尝试运行 pca 代码后,我收到一条错误消息,提示“以下变量不是定量的”,我得到了非定量变量列表。

所以一般来说,有些变量是定量的,有些不是。请参见以下示例。当我检查变量 1 时,它是正确且定量的..(随机一些变量在文件中是定量的)当我检查变量 2 时,它是不正确且非定量的..(随机一些像这样的变量是非定量的在文件中)

> data$variable1[1:5]
[1] -0.7617504 -0.9740939 -0.5089303 -0.1032487 -0.1245882

> data$variable2[1:5]
[1] -0.183546332959017 -0.179283451229594 -0.191165669598284 -0.187060515423038
[5] -0.184409474669824
731 Levels: -0.001841783473108 -0.001855956210119 ... -1,97E+05

所以我的问题是,我怎样才能把所有的非定量变量变成定量的?

使文件简短无济于事,因为这些值本身就是量化的。我不知道发生了什么。所以这是我的原始文件的链接 <- https://docs.google.com/file/d/0BzP-YLnUNCdwakc4dnhYdEpudjQ/edit

我也尝试了下面给出的答案,但它仍然没有帮助。

所以让我展示一下我到底做了什么,

> data <- read.delim("file.txt", header=T)
> res.pca = PCA(data, quali.sup=1, graph=T)
Error in PCA(data, quali.sup = 1, graph = T) :
The following variables are not quantitative:  batch
The following variables are not quantitative:  target79
The following variables are not quantitative:  target148
The following variables are not quantitative:  target151
The following variables are not quantitative:  target217
The following variables are not quantitative:  target266
The following variables are not quantitative:  target515
The following variables are not quantitative:  target530
The following variables are not quantitative:  target587
The following variables are not quantitative:  target620
The following variables are not quantitative:  target730
The following variables are not quantitative:  target739
The following variables are not quantitative:  target801
The following variables are not quantitative:  target803
The following variables are not quantitative:  target809
The following variables are not quantitative:  target819
The following variables are not quantitative:  target868
The following variables a
In addition: There were 50 or more warnings (use warnings() to see the first 50)
4

3 回答 3

0

默认情况下,R 将字符串强制转换为因子。这可能会导致意外行为。使用以下命令关闭此默认选项:

      read.csv(x, stringsAsFactors=F)

或者,您可以将因子强制转换为数字

      newVar<-as.numeric(oldVar)
于 2013-02-28T11:18:56.497 回答
0

正如 Arun 所提到的,R 将您的变量视为因素。因此它创建了一个 data.frame(实际上是一个列表)。有很多方法可以解决这个问题,一种是通过以下方式将其转换为数据矩阵;

matrix <- as.numeric(as.matrix(data))
dim(matrix) <- dim(data)

现在您可以在矩阵上运行 PCA。

编辑:

稍微扩展示例,查理建议的第二部分将不起作用。复制以下会话,看看它是如何工作的;

d <- data.frame(
 a = factor(runif(2000)),
 b = factor(runif(2000)),
 c = factor(runif(2000)))

as.numeric(d) #does not work on a list (data frame is a list)

as.numeric(d$a) # does work, because d$a is a vecor, but this is not what you are 
# after. R converts the factor levels to numeric instead of the actual value.

(m <- as.numeric(as.matrix(d))) # this does the rigth thing
dim(m)                        # but m loses the dimensions and is now a vector

dim(m) <- dim(d)              # assign the dimensions of d to m

svd(m)                        # you can do the PCA function of your liking on m
于 2013-02-28T11:07:21.463 回答
0

as.numeric(as.character(data$variable2[1:5])), 用于as.character首先获取因子变量标签的字符串表示,然后将它们转换为as.numeric

于 2021-04-04T18:06:11.717 回答