一次式によるベースライン補正について
Show older comments
グラフで得られているx軸0-36までの平均値は変えずに、
最小二乗近似法で得られたオレンジ点線の直線(y = -1.97x+116.08)と「同じ傾きで右肩上がりの直線」を求め、その直線に従いy軸を変化させるにはどのようにしたらいいでしょうか?
もしくは、
x軸が大きくなるにつれて、y軸が高いところを低く、低いところを高く、平均値は変えず全体的に右肩上がりに補正できる方法はないでしょうか?
スペクトルではないので、ベースライン補正なのか分かりませんが、簡易的な一次式で補正できれば考えています。

Accepted Answer
More Answers (1)
回転角を考えて、全体のデータを回転させると良いかと思います。
元のデータ
x = 0:0.1:36;
y = -1.97*x + 116.08;
plot(x,y,'b:');
回転させます
theta = 2 * (pi/2 - atan(-1.97)); % 回転角を計算
R = [cos(theta) -sin(theta); sin(theta) cos(theta)]; % 回転行列
center = repmat([mean(x); mean(y)], 1, length(x)); % 中心座標
s = [x;y] - center; % 原点に移動
s0 = R*s; % 回転
x0y0 = s0 + center; % 元に戻す
plot(x,y,'b:',x0y0(1,:),x0y0(2,:),'r:');
7 Comments
KT
on 7 Sep 2023
Hiro Yoshino
on 7 Sep 2023
正直、ご質問がよく理解ができていません。直線の平均値を変えずに傾きを変えることは分かったのですが..何がやりたいか、どこが分からないのか簡潔に教えていただけますか?
最小二乗法は二乗誤差を平均的に最小にする手法です。データによっては面積が一致するでしょうし、全く異なるものになる場合があります。一般化は出来ないかと。
KT
on 7 Sep 2023
Hiro Yoshino
on 8 Sep 2023
まず、段階的に確認させてください。
- 「右肩上がりの直線に変換し」 - 変換する方法 (回転) を示しました。この部分はこの方法で大丈夫ですか?
- 「その直線の通りに y軸を変換する」 - "直線の通りに" とは数学的にどういう意味ですか?、y軸を変換というのは、どう変換したいのですか?写像ですか、回転ですが、この部分で何がしたいのか具体的に教えてください。
- 「前提として、青色の面積 (y軸の値の合計) 」 - ここももう少し数学的に記述いただけますか? 積分値を保ったまま、「回転?写像?」。「これを制約条件として xxx という最適化問題を解きたい」位まで落とし込めると、説明がかなり簡単になります。
可能でしたら、やりたいことを実現するためのアルゴリズムを指し示していただけると、MATLAB で実装するにはどうするのか?という議論だけに集中できるので簡単だと思います。
今のベースで少し修正するとこんな感じになります。ご評価あればいただけると、ここからスタートして変更することもできるかと。
% データ作成
x = (0:36)';
y = 2*randn(size(x)) + 10*sin(x*2*pi/20) - 1.97*x + 116.08;
plot(x,y,'o');
[lfit, gof] = fit(x,y,'poly1') % 一次関数をデータにフィット
plot(lfit,x,y);
coeffs = coeffvalues(lfit) % モデルの係数を取得
%theta = 2 * (pi/2 - atan(coeffs(1))) % 回転角を計算
theta = -atan(coeffs(1)) % 回転角を計算
R = [cos(theta) -sin(theta); sin(theta) cos(theta)]; % 回転行列を計算
center = repmat([mean(x); mean(y)], 1, length(x)); % データの中心座標
s = [x,y]' - center; % 原点に移動
s0 = R*s; % 回転
x0y0 = s0 + center; % 元に戻す
plot(x,y,'bo-',x0y0(1,:),x0y0(2,:),'ro-'); % プロット
Hiro Yoshino
on 8 Sep 2023
ベースライン補正 で何となくどんなことをされたいのかは分かりました。
(校正のことなのかなと理解しました)
その上で、ベースライン補正で利用されるアルゴリズムなどあれば、ご紹介いただけると取り掛かり易いです。
Categories
Find more on 数学 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






