You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修正变量选择算法真阳性率计算函数的输出问题

问题描述

背景说明

这是围绕同一复杂问题分步提问的第三也是最后一个问题。上一个问题和初始问题为同系列提问,本文所用代码均来自我的统计学习研究项目GitHub仓库中名为“ten”的文件夹内的“LASSO_code(10)”脚本。

当前代码改进

将数据框列表加载到工作区并赋值给datasets后:

datasets <- lapply(filepaths_list, read.csv)

我解决了列表中每个数据框的列名修正问题,代码如下:

# 修正数据框列表'datasets'中所有数据框的列名
datasets <- lapply(datasets, function(dataset_i) { 
  colnames(dataset_i) <- c("Y", "X1", "X2", "X3", "X4", "X5", "X6", "X7", 
                           "X8", "X9", "X10", "X11", "X12", "X13", "X14", 
                           "X15", "X16", "X17", "X18", "X19", "X20", "X21", 
                           "X22", "X23", "X24", "X25", "X26", "X27", "X28", 
                           "X29", "X30")
  dataset_i })

生成真实变量列表

为重新创建多数据框版本的真实工具变量对象,添加了以下代码:

Structural_IVs_chr <- lapply(datasets, function(j) {j[1, -1]})    
> Structural_IVs_chr[[1]]
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20
1  0  0  0  0  0  0  0  0  0   0   1   0   1   0   0   1   0   0   0   0
  X21 X22 X23 X24 X25 X26 X27 X28 X29 X30
1   0   0   0   0   0   0   0   0   0   0
Structural_IVs_num <- lapply(Structural_IVs_chr, \(X) { lapply(X, as.numeric) })

通过Structural_IVs_chr生成True_Regressors(真实回归变量列表):

True_Regressors <- lapply(Structural_IVs_chr, function(i) {
  names(i)[i == 1] })
> head(True_Regressors, n = 3)
[[1]]
[1] "X11" "X13" "X16"    
[[2]]
[1] "X6"  "X7"  "X20"
[[3]]
[1] "X9"  "X10" "X20"

LASSO选择的变量

LASSO回归选择的变量存储格式如下:

> head(IVs_Selected_by_LASSO, n = 3)
[[1]]
[1] "X11" "X16"    
[[2]]
[1] "X6"  "X7"  "X20"    
[[3]]
[1] "X9"  "X10" "X20"

问题:计算匹配数量的函数错误

我尝试编写的性能计算函数结果不符合预期:

### 统计选择的变量与真实结构方程变量的匹配数量,以衡量LASSO的性能
Total_Positives <- lapply(True_Regressors, function(i) { length(i) })
> head(Total_Positives, n = 3)
[[1]]
[1] 3    
[[2]]
[1] 3    
[[3]]
[1] 3

True_Pos_list1 <- lapply(seq_along(datasets), \(i)
                        length(intersect(IVs_Selected_by_LASSO, 
                                         True_Regressors)) )
> head(True_Pos_list1, n = 3)
[[1]]
[1] 9
[[2]]
[1] 9
[[3]]
[1] 9

True_Pos_list2 <- lapply(seq_along(datasets), \(i)
                         sum(IVs_Selected_by_LASSO %in% True_Regressors))
> head(True_Pos_list2, n = 3)
[[1]]
[1] 9
[[2]]
[1] 9
[[3]]
[1] 9

正确结果应该是:

> head(True_Pos_list, n = 3)
    [[1]]
    [1] 2
    [[2]]
    [1] 3
    [[3]]
    [1] 3

并且True_Pos_list中的任何元素都不应大于Total_Positives中的对应元素,请求修正该函数。


内容的提问来源于stack exchange,提问作者Marlen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:16:08