このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
cusum
累積和を使用した平均値のわずかな変化の検出
構文
説明
[
は、ターゲット平均値の上下で 5 標準偏差を超えてずれている iupper,ilower
] = cusum(x
)x
の上側累積和と下側累積和の最初のインデックスをそれぞれ返します。最小の検出可能な平均の変化は 1 標準偏差です。関数は、x
の最初の 25 個のサンプルからターゲット平均と標準偏差を推定します。
[
は、上側累積和と下側累積和が管理限界を超えるすべてのインデックスを返します。iupper,ilower
] = cusum(___,'all')
[
も上側累積和と下側累積和を返します。iupper,ilower
,uppersum,lowersum
] = cusum(___)
出力引数なしの cusum(___)
は、ターゲット平均値の上下 1 標準偏差にそれぞれ正規化された上側累積和と下側累積和をプロットします。
例
cusum
の既定値
線形トレンドをもつ 100 サンプルのランダムな信号を生成してプロットします。再現可能な結果が必要な場合は、乱数発生器をリセットします。
rng('default')
rnds = rand(1,100);
trnd = linspace(0,1,100);
fnc = rnds + trnd;
plot(fnc)
入力引数の既定値を使用して、関数に cusum
を適用します。
cusum(fnc)
最初の 25 サンプルの平均値と標準偏差を計算します。これらの数値をターゲット平均値およびターゲット標準偏差として使用し、cusum
を適用します。累積和が、ターゲット平均値から 5 標準偏差を超えてずれる点を強調表示します。最小の検出可能な平均の変化を 1 標準偏差に設定します。
mfnc = mean(fnc(1:25)); sfnc = std(fnc(1:25)); cusum(fnc,5,1,mfnc,sfnc)
負の線形トレンドを使用して計算を繰り返します。
nnc = rnds - trnd; cusum(nnc)
不安定な動作の検出
損耗により不安定になっている車軸の動作を模した信号を生成します。分散 1/9 のホワイト ガウス ノイズを追加します。再現可能な結果が必要な場合は、乱数発生器をリセットします。
rng default
sz = 200;
dr = airy(2,linspace(-14.9371,1.2,sz));
rd = dr + sin(2*pi*(1:sz)/5) + randn(1,sz)/3;
増加するバックグラウンドのずれと結果の信号をプロットします。
plot(dr) hold on plot(rd,'.-') hold off
ずれもノイズもない場合は平均と標準偏差を求めます。ノイズのない理想的な信号とその安定したバックグラウンドをプロットします。
id = 0.3*sin(2*pi*(1:sz)/20); st = id + sin(2*pi*(1:sz)/5); mf = mean(st)
mf = -3.8212e-16
sf = std(st)
sf = 0.7401
plot(id) hold on plot(st,'.-') hold off
CUSUM 管理チャートを使用して、不安定になり始めたポイントを正確に特定します。信号が理想的動作から 3 標準偏差を超えるとシステムが不安定になる、と仮定します。最小の検出可能な変化を 1 標準偏差で指定します。
cusum(rd,3,1,mf,sf)
最小検出可能変化量を増やして違反基準をより厳格にします。望ましくないずれのインスタンスをすべて返します。
cusum(rd,3,1.2,mf,sf,'all')
ゴルフのスコアカード
ゴルフでは、ボールがホールインするまでに必要な予想ストローク数を示す "パー" がホールごとに関連付けられています。技術の高いプレーヤーは、通常、パーに非常に近いストローク数で各ホールを終了します。勝者が明らかになるまでには、数ホールをプレーし、スコアを累積する必要があります。
ベン、ジェンおよびケンは、18 ホールで構成されるフル ラウンドをプレーします。コースは、パー 3、パー 4 およびパー 5 のホールの組み合わせから成っています。ゲームの終了時に、プレーヤーは各自のスコアを集計します。
hole = 1:18; par = [4 3 5 3 4 5 3 4 4 4 5 3 5 4 4 4 3 4]; nms = {'Ben';'Jen';'Ken'}; Ben = [4 3 4 2 3 5 2 3 3 4 3 2 3 3 3 3 2 3]; Jen = [4 3 4 3 4 4 3 4 4 4 5 3 4 4 5 5 3 3]; Ken = [4 3 4 3 5 5 4 4 4 4 5 3 5 4 5 4 3 5]; T = table(hole',par',Ben',Jen',Ken', ... 'VariableNames',['hole';'par';nms])
T=18×5 table
hole par Ben Jen Ken
____ ___ ___ ___ ___
1 4 4 4 4
2 3 3 3 3
3 5 4 4 4
4 3 2 3 3
5 4 3 4 5
6 5 5 4 5
7 3 2 3 4
8 4 3 4 4
9 4 3 4 4
10 4 4 4 4
11 5 3 5 5
12 3 2 3 3
13 5 3 4 5
14 4 3 4 4
15 4 3 5 5
16 4 3 5 4
⋮
ラウンドの勝者は、終了時に下側累積和がパーを最も下回っているプレーヤーです。3 人のプレーヤーについて合計を計算し、優勝者を決定します。しきい値を低く設定し、平均の変化がすべて検出できるようにします。
[~,b,~,Bensum] = cusum(Ben-par,1,1e-4,0); [~,j,~,Jensum] = cusum(Jen-par,1,1e-4,0); [~,k,~,Kensum] = cusum(Ken-par,1,1e-4,0); plot([Bensum;Jensum;Kensum]') legend(nms,'Location','best')
ベンがラウンドを優勝しました。ホールごとのストローク数を無作為に増減して、次のゲームをシミュレートします。
Ben = Ben+randi(3,1,18)-2; Jen = Jen+randi(3,1,18)-2; Ken = Ken+randi(3,1,18)-2; [~,b,~,Bensum] = cusum(Ben-par,1,1e-4,0); [~,j,~,Jensum] = cusum(Jen-par,1,1e-4,0); [~,k,~,Kensum] = cusum(Ken-par,1,1e-4,0); plot([Bensum;Jensum;Kensum]') legend(nms,'Location','best')
入力引数
x
— 入力信号
ベクトル
入力信号。ベクトルで指定します。
例: reshape(rand(100,1)*[-1 1],1,200)
climit
— 管理限界
5 (既定値) | 実数スカラー
管理限界。標準偏差で表される実数スカラーで指定します。
mshift
— 検出する最小の平均変化
1 (既定値) | 実数スカラー
検出する最小の平均変化。標準偏差で表される実数スカラーで指定します。
tmean
— ターゲット平均値
mean(x(1:25))
(既定値) | 実数スカラー
ターゲット平均値。実数スカラーで指定します。tmean
が指定されていない場合は、x
の最初の 25 サンプルの平均値として推定されます。
tdev
— ターゲット標準偏差
std(x(1:25))
(既定値) | 実数スカラー
ターゲット標準偏差。実数スカラーで指定します。tdev
が指定されていない場合は、x
の最初の 25 サンプルの標準偏差として推定されます。
出力引数
iupper,ilower
— 管理外の点のインデックス
整数スカラー | 整数ベクトル
管理外の点のインデックス。整数スカラーまたは整数ベクトルで返されます。すべての信号サンプルが、指定した許容誤差内にある場合、cusum
は iupper
引数と ilower
引数を空で返します。
uppersum,lowersum
— 上側累積和と下側累積和
ベクトル
上側累積和と下側累積和。ベクトルで返されます。
詳細
CUSUM 管理チャート
CUSUM 管理チャートは、プロセスの平均値におけるわずかな漸進的変化を検出するよう設計されています。
推定平均が mx、推定標準偏差が σx のシーケンス x1, x2, x3, …, xn である場合、以下を使用して上側累積プロセスの和と下側累積プロセスの和を定義します。
上側累積和
下側累積和
cusum
で mshift
引数で表される変数 n はターゲット平均値からの標準偏差 tmean
の数で、これにより変化が検出可能になります。
プロセスが Uj > cσx または Lj < –cσx に従う場合、サンプル xj において CUSUM 基準に違反します。管理限界 c は、cusum
では climit
引数で表されます。
既定の設定では、関数は検出した最初の違反を返します。'all'
フラグを指定すると、関数がすべての違反を返すようになります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
指定する場合、入力引数 'all'
はコンパイル時の定数でなければなりません。
バージョン履歴
R2016a で導入
参考
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)