簡體   English   中英

用於最小二乘(FLS)回歸的MATLAB實現

[英]MATLAB implementation for Flexible Least Squares (FLS) regression

是否存在用於最小二乘(FLS)回歸 1的MATLAB實現?

我正在尋找一種隨時間變化的系數處理回歸的體面(非常痛苦)的方法。 歡迎所有想法,但最好的辦法是指向FLS回歸實現的指針,因為經過廣泛的搜索后我找不到一個想法。


1. R. Kalaba和L. Tesfatsion(1989), “通過可變最小二乘的時變線性回歸” ,《計算機和數學及其應用》,第1卷。 17,第1215-1245頁

我在FLS回歸的GitHub上找到了R代碼 我已經將其轉換為MATLAB,但是由於R和MATLAB函數之間的差異,它可能會出現一些錯誤。 現在,我們只需要對其進行測試即可進行最終調整。

function X = fls(A, b, mu, ncap, smoothed)

if isempty(mu)
    mu = 1;
end

if isempty(ncap)
    ncap = length(b);
end

if isempty(smoothed)
    smoothed = true;
end

[m n] = size(A);

M = zeros(n, n, ncap);
E = zeros(n, ncap);
X = zeros(n, ncap);
R = eye(n) * mu;

for j = 1:ncap
    Z = linsolve( qr( R + tcrossprod(A(j,:)) ), eye(n) );
    M(:,:,j) = mu * Z;               % (5.7b)
    v = b(j) * A(j,:);

    if (j == 1) 
        p = zeros(n,1);
    else
        p = mu * E(:,j-1);
    end

    w = p + v;

    E(:,j) = Z * w;                  % (5.7c)
    R = -mu * mu * Z;

    diag = R(1:n+1:end);
    R(diag) = R(diag) + 2*mu;
end

% Calculate eqn (5.15) FLS estimate at ncap
Q = -mu * M(:,:,ncap-1);

diag = Q(1: (size(Q,1)+1) : end);
Q(diag) = Q(diag) + mu;
Ancap = A(ncap,:);

C = Q + Ancap' * Ancap;
d = mu * E(:,ncap-1) + b(ncap)*Ancap';
X(:,ncap) = C * d;
X(:,ncap) = linsolve(qr(C),d);

if smoothed
    % Use eqn (5.16) to obtain smoothed FLS estimates for
    % X[,1], X[,2], ..., X[,ncap-1]

    for j = 1:ncap-1
        l = ncap - j;
        X(:,l) = E(:,l) + M(:,:,l) * X(:,l+1);
    end
else
    X = X(:,ncap);
end

end

function resp = tcrossprod(A)
resp = A * A';
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM