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
p_val = fcdf(F,df_num,df_den);
我使用 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
p_val = fcdf(F,df_num,df_den);