我有一个名为”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$traintest <- 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))# 训练和交叉验证阈值model <- pamr.train(mydata)cvmodel <- pamr.cv(model, mydata)pamr.plotcv(cvmodel)
但我无法使其工作。我得到了以下错误:
在
contrasts<-
(*tmp*
, value = contr.funs[1 + isOF[nn]])中出现错误:
对比度只能应用于具有2个或更多级别的因子
我已经将y转换为了因子。你能帮我吗?我该如何修复这个问题?
回答:
这个代码块可能有助于解决错误。
library(readr)data=read.table("geneexp.csv", row.names = 1, header =T, sep = ',')# 将数据分为训练集和测试集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))# 构建NSC模型model <- pamr.train(mydata)modelCV <- pamr.cv(model,mydata)pamr.plotcv(modelCV)