由于python的功能限制,最近开始入坑R,一开始就碰到了问题:
| |
|
然后进行datadist
> factor_sex <- df_tra$sex
> factor_age <- df_tra$age
> factor_radiomics <- df_tra$radiomics
> factor_cnn <- df_tra$cnn
> factor_y <- df_tra$type
> ddist <- datadist(factor_sex, factor_age, factor_radiomics, factor_cnn)
> options(datadist='ddist')
构建模型
f_ra <- lrm(factor_y ~ factor_sex+factor_age+factor_radiomics, x=TRUE,y=TRUE)
读入验证集数据
> csv_path_val <-'D:/pyproject/lymph2.0/Radiomics/svc/com_csv/com1_val_results.csv'
> df_val <- read.csv(csv_path_val)
> head(df_val)
X radiomics cnn sex age source type
1 anyuecheng_CT520041 0.58804122 0.5453967 1 65 val 1
2 cuijingbo_CT438275 0.09057203 0.4605141 0 64 val 0
变量名与训练集数据一样,接下来做预测
> fp <- predict(f_ra, newdata=df_val, type="fitted")
Warning message:
'newdata'必需有60行 但变量里有180行
这里就出问题了,这会导致还是在训练集上进行预测
然后本人也是快崩溃地搞了2天,终于发现问题出在datadist这里,再把这部分看一下
原因就是datadist里面的变量名与验证集上变量名不一样。而训练集因为取出的时候重新命名了所以没有影响,接下来,我们把这部分代码修改一下
sex <- df_tra$sex
age <- df_tra$age
radiomics <- df_tra$radiomics
cnn <- df_tra$cnn
y <- df_tra$type
#构建模型
ddist <- datadist(sex, age, radiomics, cnn)
options(datadist='ddist')
f_ra <- lrm(y ~ sex+age+radiomics, x=TRUE,y=TRUE)
再做预测:
fp <- predict(f_ra, newdata=df_val, type="fitted")
ok,成功运行