Matlab 逐步线性回归中预测数据的 P 值

P-value of the predicted data in Matlab step-wise linear regression

我使用 Matlab 的 stepwiselm 来找到适合我的训练数据。结果模型具有 Matlab 显示的 f 统计量的 "total p-value"。现在我想在测试数据集上使用这个模型并计算它的 p 值以确定预测的重要性。

Matlab 有 3 个命令可以根据新数据评估模型 (link)。但是 none 这些命令会自动报告 f 统计 p 值。例如,使用 predict 和来自 stepwiselm 的模型,returns 预测响应。现在的问题是我如何从测试集的预测值及其真实值中找到 p 值。

谢谢。

我还没有看到一个内置的 LinearModel class 函数来评估外推数据的解释方差(这看起来很奇怪)。

F 统计量将完整模型(由 stepwiselm 创建)的残差与简化模型 (y_hat = mean(y)) 的残差进行比较。这个算得好described here.

误差平方和 (SSE)

确定完整模型和简化模型的 SSE

[Ypred] = predict(mdl,Xnew);

SSE_F = sum((Ynew - Ypred).^2); % full model SSE
SSE_R = sum((Ynew - mean(Ynew)).^2); % reduced model SSE

自由度 (df)

我不确定,但我认为 df 将由训练数据决定,而不是测试数据。如果您不确定,我会用 Cross Validated 仔细检查。

% Change Xold,Xold to XNew,YNew if df is determined  by test-data
mdl_F = stepwiselm(Xold,Yold,...); % same parameters as original mdl
mdl_R = stepwiselm(Xold,Yold,'constant');

df_F = mdl_F.DFE; % n - p
df_R = mdl_R.DFE; % n - 1

F* 统计数据

现在我们可以比较完整模型和简化模型

MSR = (SSE_R - SSE_F) / (df_R - df_F);
MSE = SSE_ F/df_F;

F = MSR/MSE;

P值

现在我们有了 F* 统计数据,我们将把它与 F 分布进行比较以确定 P 值。
df here

df_num = mdl_F.NumPredictors; % p - 1 + 1 (matlab doesn't include intercept as a predictor)
df_den = mdl_F.DFE; % n - p

F* to F here

p_val = fcdf(F,df_num,df_den);