我有一个分类功能的数据集。我想计算这些分类特征的所有可能组合的比值比(如果比值比不显着则为0)。
这是我计算比值比或者返回0的函数:
oddsratio = function(feature1,feature2) {
OR = odds.ratio(feature1,feature2)
if (OR[,4] < 0.05) {
return(OR[,1])
}
else {
return(0)
}
}
这是我创建所有功能组合的代码:
features = c('elderly','female','race','stroke','copd','asthma','htn','pad','dyslipidemia','icd',
'af','thyroid','dm','fracture','smoker_ever','ckd','cad','obesity')
all = combn(features,2)
这是我的循环:
loop = function(data,features) {
for (i in 1:ncol(all)) {
one = all[1,i]
two = all[2,i]
dataone = data[[one]]
datatwo = data[[two]]
oddsratio(dataone,datatwo)
}
}
我收到错误:
“x必须是数字”
我尝试过重写代码,但无法让它工作。有没有人有任何想法?
编辑:
我添加了一些数据:
elderly female white stroke
1 1 1 0
0 0 1 0
0 0 1 0
0 0 0 0
0 1 1 0
0 0 1 0
0 1 0 0
1 0 1 0
0 0 1 0
0 1 1 0
再次编辑:找到解决方案
fillmatrix = function(data,features) {
OR.matrix = matrix(nrow=length(features),ncol=length(features))
for (i in 3:length(features)) {
for (d in 3:length(features)) {
or = oddsratio(data[,i],data[,d])
OR.matrix[i,d] = or
}
}
}