在跟视频对特征基因进行ROC分析时,我遇到如下错误:
hubgenes_expression如下(第一列为基因名,行为样本名):
分析错误
Error in roc.default(x, predictor, plot = TRUE, ...) :
Predictor must be numeric or ordered.
得:预测变量必须是数字或有序的。
查询roc()各参数的含义:使用 pROC包进行ROC分析 - 简书 (jianshu.com)
response
:样本类型,一般只有两类( 0 (controls) 和 1 (cases)),可做ROC曲线。当类型过多时,需要使用levels参数指定那些值作为control ,那些作为 case。predictor
:样本的预测值,可以是概率、排名之类。controls, cases
: 直接提供controls和cases,可以是数值向量,也可以是排好序的向量。formula, data
: 通过表达式传入数据框中的值 。levels
: controls 和 cases 对应的值,默认为levels(as.factor(response)),剩下的忽略;当输入数据为0、1,默认0为controls。percent
:sensitivities, specificities 和 AUC返回形式为百分数。direction
:根据两组数据中位数大小确定;“>”: control组中位数值大于cases组;“<”:control组中位数值小于或等于cases组。algorithm
:1,也是默认,数量较少;2,数量大于1000时,速度更快;3,C++实现算法,快3-5x; 4 (debug only, slow): 三个算法都运行一遍,确认返回值知否一样。5,迅速选择2或3。smooth
:ROC 曲线修饰为平滑曲线。auc
:计算AUC,默认TRUE。ci
:是否计算置信区间。plot
:是否作图。smooth.method, ci.method
:smooth 算法。
即锁定错误:
plot.roc(predictor=y,hubgenes_expression[i,],main=hubgenes[i],
+
+ col=x_color[i],print.auc=T,percent=T,cex.lab=1.5,print.auc.cex=1.5)
查看一下:
table(hubgenes_expression[2,])
即hubgenes_expression[i,]不是数字,其中包含符号。
将其改为:
as.numeric(hubgenes_expression[i,])
查看一下则有:
即运行得:
for(i in 1:length(hubgenes)){
+
+ x_color=c("blue", "red", "green", "black", "yellow" )
+
+ plot.roc(Type,as.numeric(hubgenes_expression[i,]),main=hubgenes[i],
+
+ col=x_color[i],print.auc=T,percent=T,cex.lab=1.5,print.auc.cex=1.5)
+
+ }
本人小白,如有错误,欢迎指正。