如何在保持家族独立性的同时对神经质得分进行分层抽样分割

云涛君_2798

云涛君_2798

2026-10-21

664人浏览

原创

如何在保持家族独立性的同时对神经质得分进行分层抽样分割

本文介绍一种结合家族约束与神经质得分(neofac_n)分层平衡的样本分割方法,利用 stratifiedkfold 实现等比例、无血缘重叠、分布近似一致的两组划分。

本文介绍一种结合家族约束与神经质得分(neofac_n)分层平衡的样本分割方法,利用 stratifiedkfold 实现等比例、无血缘重叠、分布近似一致的两组划分。

要满足三个关键目标——等大小分割、家族内个体不共存于同一子集、神经质得分分布高度可比——直接按 Family_ID 拆分(如取每家首/次成员)虽能保证无关性,却无法控制 NEOFAC_N 的分布偏移。理想方案需将“分层”逻辑与“家族隔离”逻辑协同建模。

核心思路是:将每个家庭视为一个不可分割的单元(unit),再对这些单元按其代表性的神经质得分进行分层抽样。由于每个家庭最多含 2 名被试(如题中 np.repeat(..., 2) 所示),我们可为每户定义一个“家族级神经质特征”,例如取均值、中位数或任一成员得分(需固定规则)。随后,将全部家庭按该特征离散化为若干层(如使用 pd.qcut 划分为 3–5 个神经质水平组),再在各层内随机分配家庭至 train/test 组,确保两组家庭数量尽可能均衡,且同一家族的所有成员始终进入同一组(从而天然满足“无亲属共组”约束)。

以下是完整实现代码(兼容原数据结构,并增强鲁棒性):

import numpy as np
import pandas as pd
from sklearn.model_selection import StratifiedShuffleSplit

# 假设 df_behavioral 已就绪(同原问题生成逻辑)

# 步骤1:按 Family_ID 聚合,构建家庭单元表(每行 = 一个 Family_ID)
family_df = df_behavioral.groupby('Family_ID').agg({
    'Subject_ID': list,
    'NEOFAC_N': 'mean'  # 使用均值作为该家庭的代表性神经质得分
}).reset_index().rename(columns={'NEOFAC_N': 'Fam_Neuroticism'})

# 步骤2:对家庭级神经质得分进行分层(离散化为 4 层,便于 StratifiedShuffleSplit 均衡分配)
family_df['Neuroticism_Quartile'] = pd.qcut(
    family_df['Fam_Neuroticism'], 
    q=4, 
    labels=False, 
    duplicates='drop'
).fillna(0).astype(int)

# 步骤3:使用 StratifiedShuffleSplit 对家庭单元进行 50/50 分层分割
sss = StratifiedShuffleSplit(n_splits=1, test_size=0.5, random_state=42)
train_family_indices, test_family_indices = next(sss.split(family_df, family_df['Neuroticism_Quartile']))

# 步骤4:还原为原始被试级索引
train_families = family_df.iloc[train_family_indices]['Family_ID'].tolist()
test_families  = family_df.iloc[test_family_indices]['Family_ID'].tolist()

sample_1 = df_behavioral[df_behavioral['Family_ID'].isin(train_families)].reset_index(drop=True)
sample_2 = df_behavioral[df_behavioral['Family_ID'].isin(test_families)].reset_index(drop=True)

print(f"Sample 1: {len(sample_1)} subjects from {len(train_families)} families")
print(f"Sample 2: {len(sample_2)} subjects from {len(test_families)} families")

✅ 优势说明:

  • 家族完整性:每个 Family_ID 全员归属同一子集,彻底规避亲属混入;
  • 分层有效性:StratifiedShuffleSplit 在家庭层级上最小化各组神经质四分位分布差异;
  • 灵活性强:支持任意家庭规模(不限于 2 人),且 qcut 自动适配数据分布;
  • 可复现:random_state 保障结果稳定。

⚠️ 注意事项:

  • 若某家族仅含 1 人,仍参与分层,不影响逻辑;
  • 避免直接对原始被试使用 StratifiedKFold —— 它无法感知家族依赖关系,将导致血缘泄漏;
  • 如需严格 1:1 样本量,可在分割后微调:从较大组中随机剔除少量家庭(优先选神经质居中家庭),并验证分布偏移是否在可接受范围(如 KS 检验 p > 0.1)。

最终,该方法在保障遗传独立性的前提下,使两组在人格特质维度上具备统计可比性,为后续建模(如机器学习预测、组间 t 检验)奠定稳健基础。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python 机器学习入门与 Scikit-Learn 实战
Python 机器学习入门与 Scikit-Learn 实战

面向机器学习初学者,以 Scikit-Learn 为核心工具,讲解机器学习基本概念(监督学习/无监督学习/模型评估)、数据预处理(标准化/归一化/缺失值填充/特征编码)、常用分类算法(逻辑回归/决策树/随机森林/SVM/KNN)、回归算法(线性回归/岭回归/Lasso)、无监督聚类(K-Means/DBSCAN)、交叉验证与超参数调优(GridSearch/RandomSearch)、混淆矩阵与 ROC/AUC 模型评估指标,帮助开发者

2026.04.24

355

29

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

2026.10.21

0

15

Playwright 页面操作指南
Playwright 页面操作指南

Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。

2026.10.21

0

16

Playwright 入门教程
Playwright 入门教程

Playwright入门专题汇集测试框架安装、VS Code配置、录制脚本、编写首个用例、运行调试及查看报告的已审核文章,帮助初学者搭建端到端测试流程。

2026.10.21

0

16

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

100

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

80

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

40

10

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

40

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

20

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习