1

私は、pca を実行したいデータ マトリックス (900 列と 5000 行) を持っています。

マトリックスは 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

Arunが述べたように、Rは変数を因子と見なします。したがって、data.frame(実際にはリストです)を作成します。この問題を解決する方法はたくさんあります。次の方法でデータマトリックスに変換します。

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

これで、マトリックス上でPCAを実行できます。

編集:

例を少し拡張すると、チャーリーの提案の2番目の部分は機能しません。次のセッションをコピーして、どのように機能するかを確認してください。

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

デフォルトでは、R は文字列を因数に強制変換します。これにより、予期しない動作が発生する可能性があります。次のコマンドを使用して、このデフォルト オプションをオフにします。

      read.csv(x, stringsAsFactors=F)

または、次のように強制的に要素を数値にすることもできます

      newVar<-as.numeric(oldVar)
于 2013-02-28T11:18:56.497 に答える