確率的な中断の犠牲になることなく、時間の経過とともに生産性または費用を理解する


8

ここで私を助けてください。おそらく私に答えを与える前に、私が質問をするのを手助けする必要があるかもしれません。私は時系列分析について学んだことがなく、それが本当に必要なものかどうかわかりません。私は時間平滑化平均について学んだことがなく、それが本当に私が必要とするものかどうかわかりません。私の統計の背景:私は生物統計学に12のクレジットを持っています(多重線形回帰、多重ロジスティック回帰、生存分析、多因子分散分析、ただし反復測定分析はありません)。

以下のシナリオをご覧ください。私が検索すべき流行語は何ですか、そして私が学ぶ必要があることを学ぶためのリソースを提案できますか?

まったく異なる目的でいくつかの異なるデータセットを確認したいのですが、それらすべてに共通するのは、1つの変数として日付があるということです。そのため、いくつかの例が思い浮かびます。時間の経過に伴う臨床生産性(手術の回数やオフィスへの訪問回数など)または時間の経過に伴う電気料金(電気会社に毎月支払われる金額など)

上記の両方について、ほぼ普遍的な方法は、月または四半期のスプレッドシートを1つの列に作成し、もう1つの列に電気代や診療所で見られる患者の数などを作成することです。ただし、1か月に数えると意味のない多くのノイズが発生します。たとえば、通常は毎月28日に電気料金を支払うが、ある場合には忘れてしまい、その翌日3日の5日後にのみ支払う場合、1か月は費用がゼロであるかのように表示され、来月は莫大な費用が表示されます。支払いの実際の日付があるので、非常に細かいデータを暦月ごとに費用にボックス化して意図的に破棄するのはなぜでしょうか。

同様に、私が会議に6日間出かける場合、その月は非常に非生産的であるように見え、それらの6日間が月末近くになると、待機リスト全体があるため、翌月は特徴的に忙しくなります。私に会いたかったが、私が戻るまで待たなければならなかった人々の

それからもちろん、明らかな季節変動があります。エアコンは電気をたくさん使うので、明らかに夏の暑さを調整する必要があります。何十億人もの子供たちが、冬の再発性急性中耳炎について私に紹介され、夏と初秋にはほとんど紹介されません。夏休みの後に学校が戻ってくる最初の6週間は、学齢期の子供が選択手術を受ける予定はありません。季節性は、従属変数に影響を与える1つの独立変数です。推測できる変数や未知の変数が他にもあるはずです。

長年にわたる臨床研究への登録を見ると、さまざまな問題がたくさん発生します。

イベントとその実際の日付を確認するだけで、実際には存在しない人工的なボックス(月/四半期/年)を作成せずに、時間の経過とともにこれを確認できる統計のブランチはどれですか。

どんなイベントでも加重平均をすることを考えました。例えば、今週見られる患者数は、今週見られる0.5 * nr +先週見られる0.25 * nr +来週見られる0.25 * nrに等しい。

これについてもっと知りたい。どのような流行語を検索する必要がありますか?


1
ヒント:より簡潔にすることは、おそらく答えを得るために役立つでしょう。

1
私はあなたに完全に同意します。私の質問は長くてとりとめのないですが、それは私の問題です。私の質問が何であるか本当にわかりません。手伝って頂けますか?
ファレル

非常に良い質問です(どういうわけか私はそれを見ただけです)。+1。
user603 2010

回答:


1

これらはより単純で直感的であるため、堅牢な時系列フィルター(つまり、時変中央値)から始めます。

基本的に、ロバストな時間フィルターは、中央値が平均値であるものを時系列平滑化することです。データの大部分を表さない限り、「ワイヤード」観察に影響されない要約測定値(この場合は、時間変化する測定値)。概要については、こちらをご覧ください

より洗練されたスムーザー(つまり、非線形スムーザー)が必要な場合は、堅牢なカルマンフィルターを使用できます(ただし、これには少し高いレベルの数学的高度化が必要です)。

このドキュメントには、次の例(オープンソースのstatソフトウェア、Rで実行するコード)が含まれています。

library(robfilter)
data(Nile)
nile <- as.numeric(Nile)
obj <- wrm.filter(nile, width=11)
plot(obj)

元の時系列が黒で、フィルターされたバージョン(中央値の繰り返しによってフィルターされたもの)が赤で過剰にプロットされている場合。最後のドキュメントには、論文や本への参照が多数含まれています。他のタイプのフィルターがパッケージに実装されていますが、繰り返される中央値は非常に単純なものです。


あなたが私を指すことができるURLを持っていますか?私は人生で時系列分析をしたことがありません。しかし、それは私が自分で教える必要があるもののようです。時系列フィルターを使用して確認できる効果的な例はありますか?
ファレル

@farel:>青い単語をクリックすると、実際のウェブサイトに移動します。特に最後のドキュメントには、ワークアウトの例が含まれています(私の投稿の編集済みバージョンで繰り返されています)。
user603 2010

1

専門知識の習得を必要としない簡単な解決策は、管理図を使用することです。それらは途方もなく簡単に作成でき、一般的な原因のバリエーション(実際の生産性が低い月がある場合など)から、特殊な原因のバリエーション(たとえば、外出中など)を簡単に見分けることができます。あなたが欲しい情報の。

また、データを保存します。さまざまな目的でグラフを使用するとのことなので、データの変換は行わないようにしてください。

こちらが優しい紹介です。管理図が好きであると判断した場合は、主題についてさらに詳しく説明する必要があります。あなたのビジネスへの利益は巨大になるでしょう。管理図は、戦後の日本経済ブームの主要な原因であったと言われています。

Rパッケージもあり。


1

あなたの問題を解決するかもしれない「時間ベースのボックスカー」機能について聞いたことがあります。「ウィンドウサイズ」の時間ベースのボックスカー合計Δt 時間で定義されます t 間のすべての値の合計になる tΔt そして t。これは、あなたが望むかもしれないし、望まないかもしれない不連続性の影響を受けます。古い値に重み付けを下げたい場合は、時間ベースのウィンドウ内で単純または指数移動平均を使用できます。

編集:

私はこの質問を次のように解釈します。いくつかのイベントが時々発生するとします t 大きさで バツ。(例えば、バツ 支払われた請求額かもしれません。)関数を探します ftの大きさの合計を推定します バツ 「近く」の時間 t。OPによって提示された例の1つとして、ft およそ「電気代をどれくらい払ったか」を表す t

この問題に似ているのは、時間あたりの「平均」値を推定することです。 t。例:回帰補間(通常、ノイズの多いデータには適用されません)、およびフィルタリング。これら3つの問題のうちの1つだけを勉強することで、生涯を過ごすことができます。

本質的に統計的な、一見無関係な問題が密度推定です。ここでの目標は、マグニチュードの観測を前提としてy あるプロセスによって生成され、そのプロセスが重大なイベントを生成する確率を概算する y。密度推定の1つの方法は、カーネル関数を使用することです。私の提案は、この問題に対してカーネルアプローチを悪用することです。

しましょう wt そのような機能であること wt0 すべてのために tw0=1 (通常のカーネルはすべてこのプロパティを共有するわけではありません)、そして wt0。しましょうh 可能な帯域幅、各データ点がありどのくらいの影響力を制御し、。与えられたデータtバツ、合計推定値を

ft=Σ=1バツw|tt|/h
関数のいくつかの可能な値 wt 以下の通り:
  • 均一な(または「ボックスカー」)カーネル: wt=1 ために t1 そして 0 さもないと;
  • 三角カーネル: wt=最高01t;
  • 二次カーネル: wt=最高01t2;
  • tricubeカーネル: wt=最高01t2;
  • ガウスカーネル: wt=expt2/2;

私はこれらのカーネルを呼び出しますが、それらはあちこちに一定の要因によってずれています。カーネルの包括的なリストも参照してください。

Matlabのコード例:

%%kernels
ker0 = @(t)(max(0,ceil(1-t))); %uniform
ker1 = @(t)(max(0,1-t)); %triangular
ker2 = @(t)(max(0,1-t.^2)); %quadratic
ker3 = @(t)(max(0,(1-t.^2).^3)); %tricube
ker4 = @(t)(exp(-0.5 * t.^2)); %Gaussian

%%compute f(t) given x_i,t_i,kernel,h
ff = @(x_i,t_i,t,kerf,h)(sum(x_i .* kerf(abs(t - t_i) / h)));

%%some sample data: irregular electric bills
sdata = [
datenum(2009,12,30),141.73;...
datenum(2010,01,25),100.45;...
datenum(2010,02,23),98.34;...
datenum(2010,03,30),83.92;...
datenum(2010,05,01),56.21;...       %late this month;
datenum(2010,05,22),47.33;...       
datenum(2010,06,14),62.84;...       
datenum(2010,07,30),83.34;...       
datenum(2010,09,10),93.34;...       %really late this month
datenum(2010,09,22),78.34;...
datenum(2010,10,22),93.25;...
datenum(2010,11,14),83.39;...       %early this month;
datenum(2010,12,30),133.82];

%%some irregular observation times at which to sample the filtered version;
t_obs  = sort(datenum(2009,12,01) + 400 * rand(1,400));

t_i = sdata(:,1);x_i = sdata(:,2);

%%compute f(t) for each of the kernel functions;
h   = 60;    %bandwidth of 60 days;

fx0 = arrayfun(@(t)(ff(x_i,t_i,t,ker0,h)),t_obs);
fx1 = arrayfun(@(t)(ff(x_i,t_i,t,ker1,h)),t_obs);
fx2 = arrayfun(@(t)(ff(x_i,t_i,t,ker2,h)),t_obs);
fx3 = arrayfun(@(t)(ff(x_i,t_i,t,ker3,h)),t_obs);
fx4 = arrayfun(@(t)(ff(x_i,t_i,t,ker4,0.5*h)),t_obs);   %!!use smaller bandwidth

%%plot them;
lhand = plot(t_i,x_i,'--rs',t_obs,fx0,'m-+',t_obs,fx1,'b-+',t_obs,fx2,'k-+',...
t_obs,fx3,'g-+',t_obs,fx4,'c-+');
set(lhand(1),'MarkerSize',12);
set(lhand(2:end),'MarkerSize',4);
datetick(gca());
legend(lhand,{'data','uniform','triangular','quadratic','tricube','gaussian'});

プロットは、いくつかのサンプルの電気料金データでのいくつかのカーネルの使用を示しています。 代替テキスト

均一カーネルは、OPが回避しようとしている「確率的ショック」の影響を受けることに注意してください。tricubeカーネルとGaussianカーネルは、より滑らかな近似を提供します。このアプローチが許容できる場合は、カーネルと帯域幅を選択するだけで済みます(一般に、これは難しい問題ですが、ドメインに関する知識と、コードテストと再コードのループがあれば、それほど難しくはありません)。


シャビーシェフ:>私はファレルが彼の質問でこのアプローチに反対する議論を具体的に述べたと思います。
user603 2010

質問はややあいまいです。私のポイントは、OPが「流行語」を探していたということです。
shabbychef 2010

私は時間ベースのボックスカーをグーグル検索し、ほとんど思いつきませんでした。うまくいった例を教えていただけますか?
Farrel、2009

1

流行語:補間、リサンプリング、スムージング。

あなたの問題は人口統計で頻繁に発生する問題に似ています。たとえば、国勢調査のカウントが年齢の間隔に分解されている場合があり、そのような間隔は常に一定の幅ではありません。年齢別に分布を補間したいとします。これが問題と共有するのは、可変幅(=可変時間間隔)は別として、データは負ではない傾向があるということです。さらに、そのようなデータセットの多くはノイズを含む可能性がありますが、特定の形式の負の相関があります。1つのビンに表示されるカウントは、隣接するビンには表示されませんが、間違ったビンに割り当てられた可能性があります。たとえば、高齢者は年齢を最も近い5歳に丸める傾向があります。彼らは見落とされていませんが、間違った年齢グループに貢献している可能性があります。概して、データは完全で信頼できるものです。この類比では、国勢調査全体について話します。データセットには、実際の電気料金、実際の登録などがあります。したがって、それは、さらなる分析(時系列分析では等間隔の時間など)に役立つ一連の間隔にデータを合理的に割り当てる問題です。ここで、補間とリサンプリングが行われます。

多くの補間手法があります。人口統計学で最も一般的なものは単純な計算のために開発されたもので、多項式スプラインに基づいています。多くの人は、データの処理方法に関係なく、知っておく価値のあるトリックを共有しています。生データを補間しようとしないでください。代わりに、それらの累積合計を補間します。 後者は、元の値の非負性により単調に増加するため、比較的滑らかになる傾向があります。これが多項式スプラインがまったく機能する理由です。このアプローチのもう1つの利点は、近似がデータポイントから逸脱する可能性がありますが(わずかに、期待どおり)、全体として正しく合計を再現することです、その結果、何も失われたり獲得したりすることはありません。もちろん、累積値を(時間または年齢の関数として)適合させた後、最初の差異を取り、任意のビン内の合計を推定します。

このアプローチの最も簡単な例は線形スプラインです。累積のプロットで連続する点を接続するだけです。 バツ 対累積 t線分ごと。任意の時間間隔でカウントを推定する[t0t1] 値を読み取ることにより バツ0 そして バツ1 スプライン曲線の t0 そして t1 それぞれと使用 バツ1バツ0。より良いスプライン(一部の領域では3次、多くの人口統計アプリでは5次)は、推定値を改善することがあります。これは、データに重みを付けるという直感に相当し、優れたグラフィカルな解釈を提供します。


興味深いようです。簡単なR実装を知っていますか?
Farrel、2009

親愛なる@whuber私は本当にこれをRに実装したいので、stackoverflowに質問を投稿しました。あなたは興味があるかもしれません。あなたはRIがそれに答えるためにあなたを愛してしまう使用している場合はそうでないあなただけ後ろに座るとwhatchすることをお勧めします
ファレル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.