用于 AUROC 计算的矢量 3/三个 Alpha 插值

问题描述 投票:0回答:1

这篇文章与我的上一篇文章有很大关系。

我试图得到(并已经解决)有三个向量被递归地乘以 3 个不同 alpha 的组合。

我在这里发布我的答案,作为其他有此特定数据集问题的人的资源。

r dataframe roc auc
1个回答
0
投票

我的方法如下:

library("dplyr")
library("MESS")
library("rgl")

#For a three framed vector
  
  df <- data.frame(ID = LETTERS[1:3],
                   X = seq(0.1,0.3, by = 0.1),
                   Y = seq(0.4,0.6, by = 0.1),
                   Z = seq(0.7,0.9, by = 0.1))
  
  Abs <- data.frame(ID = LETTERS[1:3],
                    Abs = c(1,0,1))
  
  #3 vector alpha prep
  alpham <- data.frame(row = 1:3,
                       Alpha1 = seq(0.1,0.3,by = 0.1))
  alpham2 <- alpham %>%
    slice(rep(1:n(), each = nrow(alpham))) %>%
    group_by(row) %>%
    mutate(Alpha2 = seq(0.1,0.3,by = 0.1)) %>%
    mutate(Alpha3 = 1 - (Alpha1+Alpha2)) %>%
    filter(if_any(Alpha3,~ . >0))
    alpham2$row <- seq_len(nrow(alpham2))

  #This is where the fun begins - Determining AUCs
  result1 <- df %>%
    slice(rep(1:n(), each = nrow(alpham2))) %>%
    group_by(ID) %>%
    mutate(row = 1:n()) %>%
    left_join(.,alpham2,by = "row") %>%
    mutate(P = (X^alpham2$Alpha1 * Y^alpham2$Alpha2 * Z^alpham2$Alpha3)) %>%
    left_join(., Abs, by = "ID") %>%
    select(-row) %>%
    #This is to create AUC by each XY pair
    group_by(Alpha1,Alpha2) %>%
    summarize(AUC = auc(P,Abs,type = "linear"), .groups="keep")
  
    #Finding best alpha combination
    maxalpha <- which(result1$AUC == max(result1$AUC))
    maxalpha <- result1[maxalpha,]
    
    #plotting
    plot3d(result1$Alpha1,result1$AUC,result1$Alpha2)
© www.soinside.com 2019 - 2024. All rights reserved.