2016-12-23 15 views
-1

私は、蛍光分光法によるデータを用いてパラレルファクター分析(PARAFAC)を実行したいと考えています。私は3次元配列(39x151x43)を持っています。これは "multiway"パッケージのparafac関数に渡します。これまでのところ、うまくいきましたが、いくつかのコンポーネントに対して負の値が得られます。マニュアルでは、非負性の制約を指定することができます。しかし、私は制約オプションのベクトルがどのように見えるか理解していません。私はRのマルチウェイパッケージを使用した並列因子分析における非負性の制約の設定方法は?

#### creating dummy values for Stackoverflow #### 
A <- c(1:39) 
B <- rnorm(151, mean =1, sd=0.5) 
C <- rnorm(43, mean=1, sd = 0.5) 

myArray <- array(c(A,B,C), dim = c(39,151,43)) 
dim(myArray) 

library(multiway) # load the library 
myModel <- parafac(myArray, nfac = 3) # how to set const? 
#Input 'const' must be 3 element vector specifying constraint for each mode 

私は「入力 『のconst』はそれぞれのモードの制約を指定する3要素ベクトルでなければなりません」というエラーを取得する次の操作を実行しようとすると一部のGoogle-FUを無駄にしました。 parafac関数がそれを受け入れるように、ベクターはどのように見えますか?どんな助けや答えを指しても大歓迎です。

+1

は[良い質問をする方法](HTTPに関する情報をお読みくださいする必要があります.com/help/how-to-ask)と[再現可能な例]を与える方法(http://stackoverflow.com/questions/5963269)を参照してください。これは他の人があなたを助けることをはるかに容易にします。 – Axeman

答えて

0

制約ベクトルのパラメータは、0、直交:1、非負:2という制約なしです。 // stackoverflowの:すべての3つの入力A、B、Cが負であることをしている場合

制約ベクトルはconst=c(2,2,2)

#Always remember to use set.seed when performing random sampling 
#this ensures the example is reproducible 

set.seed(123) 
A <- c(1:39) 
B <- rnorm(151, mean =1, sd=0.5) 
C <- rnorm(43, mean=1, sd = 0.5) 

myArray <- array(c(A,B,C), dim = c(39,151,43)) 
dim(myArray) 

library(multiway) 

#Without constraints 
myModel_Default <- parafac(myArray, nfac = 3) 

#Percentage of negative elements 

sum(myModel_Default$A<0)/length(myModel_Default$A) 
#[1] 0.3333333 
sum(myModel_Default$B<0)/length(myModel_Default$B) 
#[1] 0.6865342 
sum(myModel_Default$C<0)/length(myModel_Default$C) 
#[1] 0.3488372 

#With constraints 

myModel_NonNeg <- parafac(myArray, nfac = 3,const=c(2,2,2)) 

sum(myModel_NonNeg$A<0)/length(myModel_NonNeg$A) 
#[1] 0 
sum(myModel_NonNeg$B<0)/length(myModel_NonNeg$B) 
#[1] 0 
sum(myModel_NonNeg$C<0)/length(myModel_NonNeg$C) 
#[1] 0 
関連する問題