预测变量必须为数值向量、数值矩阵或分类向量

标签: 数据分析 工具箱 数模竞赛

wenxin 2026-05-07 10:48:19

北太天元不支持 categorical 类型变量作为拟合变量,可使用 CategoricalVars 参数替代

%% 分段线性回归拟合:NIPT检测数据分析
% 业务背景:研究无创产前检测(NIPT)中,胎儿Y染色体浓度的影响因素
% 核心变量说明:
%    Y     - 母血中胎儿Y染色体游离DNA浓度(因变量/核心指标)
%    GA    - 孕妇孕周(自变量)
%    BMI   - 孕妇身体质量指数(分组依据)
% 分析目的:按BMI分组拟合回归线,探究不同肥胖程度下孕周对Y浓度的影响
% 兼容说明:北太天元不支持 categorical 类型变量作为拟合变量,可使用 CategoricalVars 参数替代
clear; clc; close all;

%% ========== 1. 生成模拟数据 ==========
rng(0);                  % 固定随机种子,结果可复现
n = 50;                  % 模拟样本数量
Y  = rand(n,1) * 0.2;    % 模拟胎儿Y染色体浓度数据
GA = rand(n,1) * 20 + 10;% 模拟孕周范围 10~30周
BMI= rand(n,1) * 30 + 15;% 模拟BMI范围 15~45

% BMI分组(固定切点:<30.5 / 30.5~36 / ≥36)
BMI_group = discretize(BMI, [0, 30.5, 36, Inf]); 

% 构建回归分析数据表
model_data = table(Y, GA, BMI_group, 'VariableNames', {'Y','GA','BMI_group'});

%% ========== 2. 【初始方案】转为分类变量(北太天元不支持,会报错) ==========
% 北太天元兼容性问题:不支持 categorical 数据类型,此代码运行报错
% model_data.BMI_group = categorical(model_data.BMI_group); 
% model1 = fitlm(model_data, 'Y ~ BMI_group * GA');

%% ========== 3. 【错误用法】数值型分组直接拟合 ==========
% BMI_group为数值类型,会被模型当作连续变量,无法实现分组分段效果
% model2 = fitlm(model_data, 'Y ~ BMI_group * GA');

%% ========== 4. 【替代方案】CategoricalVars 参数指定分组变量 ==========
% 无需转换数据类型,直接指定分组变量,完美替代 categorical,兼容北太天元
model_final = fitlm(model_data, 'Y ~ BMI_group * GA', 'CategoricalVars', "BMI_group");


初始方案报错信息如下:

预测变量必须为数值向量、数值矩阵或分类向量。

位于 BP 文件 [D:\ProgramFiles\baltamatica\toolbox\Stats\src\FitObject.bp]

位于 BP 文件 [D:\ProgramFiles\baltamatica\toolbox\Stats\src\TermsRegression.bp]

位于 BP 文件 [D:\ProgramFiles\baltamatica\toolbox\Stats\src\FitObject.bp]

位于 BP 文件 [D:\ProgramFiles\baltamatica\toolbox\Stats\src\LinearModel.bp]

位于 BP 文件 [D:\ProgramFiles\baltamatica\toolbox\Stats\src\fitlm.bp]

位于文件 D:\Baltamatica\Workspace\learn\Baltamatica\产品使用案例制作\NIPT的时点选择与胎儿异常判定\test.m (第 27 行)

model1 = fitlm(model_data, 'Y ~ BMI_group * GA');

回复

回复

重置 提交