Matlab で簡単なセットアップを使用して分位点回帰プロセスを実装しようとしています。このページには、線形プログラムとしての分位点回帰の説明が含まれており、適切な行列とベクトルが表示されます。Matlab で実装しようとしましたが、bhat
ベクトルの正しい最後の要素を取得できません。約 1 のはずですが、非常に低い値 (<1e-10) になります。私が持っている別のアルゴリズムを使用すると、1.0675 の値が得られます。どこで私は間違えましたか?私は推測しているA
、b
またはf
間違っています。
で遊んでみましたがoptimset
、それは問題ではないと思います。数学からコードに変換するときに変換ミスを犯したと思います。どこにあるのかわかりません。
% set seed
rng(1);
% set parameters
n=30;
tau=0.5;
% create regressor and regressand
x=rand(n,1);
y=x+rand(n,1)/10;
% number of regressors (1)
m=size(x,2);
% vektors and matrices for linprog
f=[tau*ones(n,1);(1-tau)*ones(n,1);zeros(m,1)];
A=[eye(n),-eye(n),x;
-eye(n),eye(n),-x;
-eye(n),zeros(n),zeros(n,m);
zeros(n),-eye(n),zeros(n,m)];
b=[y;
y
zeros(n,1);
zeros(n,1)];
% get solution bhat=[u,v,beta] and exitflag (1=succes)
[bhat,~,exflag]=linprog(f',A,b);