是否有MATLAB實現Flexible Least Squares (FLS) regression ?MATLAB實現的靈活最小二乘(FLS)迴歸
我正在尋找一種像樣的(好的,最不痛苦的)方法來處理具有時變係數的迴歸。所有的想法都是值得歡迎的,但最好的辦法是指向FLS迴歸實現,因爲我在廣泛的谷歌搜索之後找不到一個。
是否有MATLAB實現Flexible Least Squares (FLS) regression ?MATLAB實現的靈活最小二乘(FLS)迴歸
我正在尋找一種像樣的(好的,最不痛苦的)方法來處理具有時變係數的迴歸。所有的想法都是值得歡迎的,但最好的辦法是指向FLS迴歸實現,因爲我在廣泛的谷歌搜索之後找不到一個。
我已經找到了FLS迴歸的R code on GitHub。我將它轉換爲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
是否有玩具輸入,我可以用它來驗證我的代碼? – Yamaneko 2012-08-06 19:52:25