【问题标题】:R function for ROC or sensitivity anlysis for survey dataROC 的 R 函数或调查数据的敏感性分析
【发布时间】:2022-01-08 08:13:03
【问题描述】:

我正在进行 NHIS 2020 调查,但找不到 ROC 函数或逻辑回归模型的敏感性分析 有什么已知的功能吗?? 再问一个问题,是否有任何功能可以将调查数据分为训练和测试?

我试图拆分调查数据而不是数据框

data <- svydesign(id=~PPSU, strata=~PSTRAT, 
                     nest = TRUE, 
                     weights=~WTFA_A,
                     data=dat)

我在将数据拆分为 0.2\0.8 之后制作了 glm 模型,然后我将其转换为调查设计(不确定这是否正确)

glm10 <- svyglm(PAIFRQ3M_A ~ NOTCOV_A+ SOCERRNDS_A +WELLNESS_A+
                 COGMEMDFF_A+CURJOBSD_A+SMKEV_A +DRK12MN_A+ 
                 CURJOBSD_A+CVDDIAG_A+ANXLEVEL_A*SMKEV_A+
                 AFVET_A*FGEFRQTRD_A+OPDCHRONIC_A+COMDIFF_A+PHSTAT_A*HOSPONGT_A+
                 EMPDYSMSS2_A+PHSTAT_A+SLPHOURS_A,
               design=as.svrepdesign(train.data) ,na.action=na.omit ,family=quasibinomial)

我进行的敏感性测试是:

fitted<-predict(glm10, return.replicates=TRUE, type="response") 

sensitivity<-function(pred,actual) mean(pred>0.1 & actual)/mean(actual) withReplicates(fitted, sensitivity, actual=glm10$PAIFRQ3M_A)

但我收到一个错误错误:“灵敏度0.1 & actual)/mean(actual) withReplicates”中出现意外符号

【问题讨论】:

    标签: r survey roc


    【解决方案1】:

    我在下面创建了一些样本数据和代码,可能指向正确的方向,但您的问题非常广泛,所以可能无法回答所有内容。 caTools 包可以帮助拆分为测试/训练。 pROC 包可以帮助 ROC。

    set.seed(05062020)
    # Create sample data
    alldata <- data.frame(outcome = sample(0:1, 100, replace = TRUE),
                          predictor1 = sample(1:3, 100, replace = TRUE),
                          predictor2 = sample(1:5, 100, replace = TRUE))
    
    # Split into testing and training
    library(caTools)
    sample <- sample.split(alldata$outcome, SplitRatio = 0.7)
    train <- subset(alldata, sample == TRUE)
    test <- subset(alldata, sample == FALSE)
    
    # Run example logistic model
    example_model <- glm(outcome ~., family = binomial, data = train)
    
    # get prediction from fitted model
    predicts <- predict(example_model, type = "response", newdata = test[,-which(names(test) == "outcome")])
    
    # ROC and plot
    library(pROC)
    roc(test$outcome, predicts) #ROC
    
    plot.roc(smooth(roc(test$outcome, predicts)), col = 1, lwd = 3, 
             main = "AUC", xlab = "1 - Specificity", legacy.axes = TRUE)
    

    【讨论】:

      【解决方案2】:

      你可以试试pROC 包。

      要拆分数据,您需要决定如何拆分它。例如,您可以使用一半作为训练数据,一半作为测试数据。假设 dataset 是您的数据集。它有 10,000 行

      default_idx = sample(nrow(dataset), 5000)
      default_trn = dataset[default_idx, ]
      default_tst = dataset[-default_idx, ]
      

      然后你可以像这样得到 ROC:

      model_glm = glm(DV ~ IV, data = default_trn, family = "binomial")
      
      test_prob = predict(model_glm, newdata = default_tst, type = "response")
      test_roc = roc(default_tst$DV ~ test_prob, plot = TRUE, print.auc = TRUE)
      

      更多详细解释请参见此处:https://daviddalpiaz.github.io/r4sl/logistic-regression.html#roc-curves

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多