如何使用最近收缩质心分类器训练基因数据集?

how to train a gene dataset with a nearest shrunken centroid classifier?

我有一个名为“geneexp.csv”的数据文件。

数据包含有关三种不同细胞类型(CD4 和 CD8、CD19)的基因表达的信息我想通过对训练数据执行最近的收缩质心分类来对细胞进行分类,其中通过交叉验证选择阈值。我拆分了数据(70% 训练和 30% 测试)。

data = read.csv("geneexp.csv")

splitData <- function(data, trainRate) {
  n <- dim(data)[1]
  idxs <- sample(1:n, floor(trainRate*n))
  train <- data[idxs,]
  test <- data[-idxs,]
  return (list(train = train, test = test))
}

split <- splitData(data, .7)
train <- split$train
test  <- split$test

然后使用 pamr 包,我尝试构建以下模型和绘图:

y <- train[[ncol(train)]]
x <- t(train[,-ncol(train)]) 
mydata <- list(
  x = x, 
  y = as.factor(y),
  geneid = as.character(1:nrow(x)),
  genenames = rownames(x)
)

# Training and cross-validating threshold
model <- pamr.train(mydata)
cvmodel <- pamr.cv(model, mydata)
pamr.plotcv(cvmodel)

但我做不到。我收到以下错误:

Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels

我已经将y转入因数了。你能帮助我吗?我该如何解决?

此代码块可能有助于解决错误。

library(readr)

data=read.table("geneexp.csv", row.names = 1, header =T, sep = ',')

# Dividing data into train and test data
n <- dim(data)[1]
set.seed(12345)

id <- sample(1:n, floor(n*0.7))
train <- data[id,]
test <- data[-id,]

library(pamr)

x <- t(train[,-2086])
y <- train[[2086]]

mydata <- list(x=x,y=as.factor(y),geneid=as.character(1:nrow(x)), genenames=rownames(x))

# Buiding NSC model

model <- pamr.train(mydata)
modelCV <- pamr.cv(model,mydata)

pamr.plotcv(modelCV)