簡體   English   中英

如何使用 R 中的多路包在並行因子分析中為非負性設置約束?

[英]How to set constraints for non-negativity in parallel factor analysis using the multiway package in R?

我想使用熒光光譜數據進行平行因子分析 (PARAFAC)。 我有一個三維數組 (39x151x43),我將它傳遞給“multiway”包中的 parafac 函數。 到目前為止,它運行良好,但我得到了一些組件的負值。

我在手冊中讀到,可以為非負性指定約束。 但是,我不明白約束選項的向量應該是什么樣子。 當我嘗試執行以下操作時,我收到一條錯誤消息,指出“輸入‘const’必須是為每種模式指定約束的 3 元素向量”

#### 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

一些研究無濟於事。 向量應該如何顯示以便 parafac 函數接受它?

約束向量的參數為無約束:0,正交:1,非負:2。

如果所有三個輸入 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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM