r语言 predict(newdata) 出现变数长度不匹配问题

由于python的功能限制,最近开始入坑R,一开始就碰到了问题:

 

> csv_path_tra <- 'D:/pyproject/lymph2.0/Radiomics/svc/com_csv/com1_tra_results.csv'
> df_tra <- read.csv(csv_path_tra)
> head(df_tra)
                         X radiomics       cnn sex age source type
1   baoxinling_CT180821191 0.6194970 0.6837219   0  61    tra    1
2      bianmin_CT180301329 0.5477175 0.5722265   0  68    tra    1
3     biyunyou_CT180713237 0.5345409 0.6631875   1  62    tra    1
4 caodongsheng_CT180409759 0.5182320 0.6963705   1  64    tra    0
5   caojiechen_CT190515417 0.7949602 0.7241559   1  63    tra    1
6   chendedong_CT180326317 0.3026326 0.5044603   1  56    tra    0
 

>注意head信息

然后进行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,成功运行

 

 

 

 

 

 

 

 

 

  • 18
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值