Matrix is singular, RCOND=NAN for a OLS regression
7 次查看(过去 30 天)
显示 更早的评论
Hello all,
I am attempting to code an OLS regression, using a OLS-function of my own design. The code looks as follows:
Y = lntrentsa;
nobs = size(Y,1);
X = [ones(nobs,1), airbnbsa, airbrnb*oorate10];
knum = size(X,2);
b = inv(X'*X) * X'*Y;
However, I am unable to get an output for b(eta) as I get the error message:
Warning: Matrix is singular, close to singular or badly scaled. Results may be inaccurate. RCOND = NaN
Would anyone know why this might be? Which Matrix does the error message mean? I have attempted rewriting b but I still only get Nan values:
b = (X'*X)\ X'*Y
My dataset is quite large (nobs = 745776), could this perhaps have an influence?
I'd be grateful for any advice! Thank you
0 个评论
回答(1 个)
Bruno Luong
2022-4-24
编辑:Bruno Luong
2022-4-24
First make sure your data X and Y contain only finite elements (no NaN, Inf, or such).
Instead of
b = inv(X'*X) * X'*Y;
try (R2018a or later required)
[XN,C,S] = normalize(X);
b = ((XN+C./S)\Y) ./ S.';
3 个评论
Bruno Luong
2022-4-24
编辑:Bruno Luong
2022-4-24
So may be your matrix is really singular (rank(X) < 3), in this case you migh wanr to do
b = pinv(X'*X) * X'*Y;
or
[XN,C,S] = normalize(X);
XN = (XN+C./S);
b = (pinv(XN'*XN) * XN'*Y) ./ S.';
But MATLAB warning is still valid: the result may be innacurate, simply your data are not allowed to observe whatever the parameters b you want to compute.
Bruno Luong
2022-4-25
You might also want to experiment with different method of normalizing, e.g.,
[XN,C,S] = normalize(X,'medianiqr')
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Performance and Memory 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!