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

채택된 답변
추가 답변 (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
KT
2023년 9월 7일
Hiro Yoshino
2023년 9월 7일
正直、ご質問がよく理解ができていません。直線の平均値を変えずに傾きを変えることは分かったのですが..何がやりたいか、どこが分からないのか簡潔に教えていただけますか?
最小二乗法は二乗誤差を平均的に最小にする手法です。データによっては面積が一致するでしょうし、全く異なるものになる場合があります。一般化は出来ないかと。
KT
2023년 9월 7일
Hiro Yoshino
2023년 9월 8일
まず、段階的に確認させてください。
- 「右肩上がりの直線に変換し」 - 変換する方法 (回転) を示しました。この部分はこの方法で大丈夫ですか?
- 「その直線の通りに 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
2023년 9월 8일
ベースライン補正 で何となくどんなことをされたいのかは分かりました。
(校正のことなのかなと理解しました)
その上で、ベースライン補正で利用されるアルゴリズムなどあれば、ご紹介いただけると取り掛かり易いです。
카테고리
도움말 센터 및 File Exchange에서 数学에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






