# spnmf: spnmf In SpNMF: Supervised NMF

## Description

The spnmf is used to fit supervised Non-negative Matrix Factorization model on data when the combined feature matrix is known.

## Usage

 `1` ```spnmf(data,Tp) ```

## Arguments

 `data` an optional n by p count data matrix. The p columns of the matrix are different variables and the n rows are samples. Each column should contain at lest one none zero entry. When n = 1, it is a row vector. `Tp` a combined feature matrix in dimension p by r. p is the number of variables and r is the number of types. Tp can also be calculated from function `getT`.

## Details

The function is based on R package NMF.

## Value

 `W` the supervised weight matrix in dimension n by r. n is the number of observations. r is the number of type for the data. It is the coefficients of the feature matrix. `loglh` the log-likelihood of the supervised NMF model.

## Author(s)

Yun Cai, Hong Gu and Toby Kenney

## References

Learning Microbial Community Structures with Supervised and Unsupervised Non-negative Matrix Factorization

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25``` ```##an example of classification based on supervised nmf results #spdata consists of two classes, the first 40 samples are from class 1 and the left from class 2 ##label each observation's class as 1 or 0 y=c(rep(1,4),rep(0,4)) ##split the data half as training data the other half as test data y.train=y.test=c(rep(1 ,2),rep(0,2)) spdata.train=spdata[c(1:2,41:42),] spdata.test=spdata[c(21:22,61:62),] #remove all zero columns spdata.train.rm=spdata.train[,colSums(spdata.train)!=0] #remove the same variables from test data spdata.test.rm=spdata.test[,colSums(spdata.train)!=0] #get feature matrix with rank 2 and 3 for the two groups T.eg=getT(spdata.train.rm,y.train,2,3) #get weight matrix rs.train=spnmf(spdata.train.rm,T.eg) w.train=rs.train\$W rs.test=spnmf(spdata.test.rm,T.eg) w.test=rs.test\$W ##the weight matrix can be used to do classification md.train=glm(y.train~.,data=data.frame(w.train),family=binomial(link=logit)) ##predict the test data pred=predict(md.train,newdata=data.frame(w.test),type ="response") ```

SpNMF documentation built on May 2, 2019, 3:33 p.m.