![](/img/trans.png)
[英]nsprcomp(): enforcing non-negativity for principal component analysis in 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.