先前看到帖子 MATLAB怎么得到多元线性回归系数t检验的p值,借鉴了一下该贴中的代码,在他们的基础上求解了每个变量的p值。
% X
% Y
[b, bint, r, rint, stats] = regress(Y, X);
Y_pre = X * b;
% stats(1)
% stats(3)
A = X' * X; %求算信息阵A,
C = inv(A); %求算信息阵的逆阵
SSy = var(Y) * (size(Y, 1) - 1);
% Y_pre1 = mymodel(b1, X1);
yhat = Y_pre;
RSS = (Y - yhat)' * (Y - yhat); % residual sum of squares
MSe = RSS / (size(Y, 1) - size(b, 1) - 1); %mean squares of residuals
rsquare = (SSy - RSS) / SSy; %determinant coefficeient
sp = sqrt(MSe * diag(C)); % standard error of para (b1)
t = b ./ sp; % t value
% t = [t(1, 1), t(2, 2)]
n = size(X, 1);
v = size(X, 2);
pval = 2 * (1 - tcdf(abs(t), n - v));
但是这里计算出来的p值好像有一些问题。但在Matlab中,提供了多元线性回归的函数,里面提供了每个变量的p值和整体的R2。使用LinearModel.fit进行回归分析,仅用一行代码就获取预测变量的系数和p值和R2。
% X为N行3列的数组,即三个变量
LinearModel.fit(X, Y)
欢迎大家进行补充!