3

動物の動きの角度を分析したい。1秒あたり10回の記録がある追跡データがあります。記録ごとのデータは、動物の位置(x、y)、前の記録に対する角度と距離で構成され、さらに速度と加速度が含まれます。動物が特定の角度を作っている間の速度を分析したいのですが、私のデータの時間分解能が非常に高いため、各ターンはいくつかの微細な角度で構成されています。

この問題を回避する方法は2つあると思いましたが、どちらもRでそのようなことを実現する方法がわからないので、助けていただければ幸いです。

1つ目:時間分解能を特定の要因で下げる。ただし、これには、データの重要な部分が失われる可能性があるという欠点があります。それにもかかわらず、たとえばデータセットの3回目または10回目の記録ごとに自動的にサブサンプリングするにはどうすればよいですか?

2番目:まっすぐな動きをいわゆる「フライト」に変換することによって。急性のターンで区切られた、ほぼ同じ方向のステップのルールベースの集約(図を参照)。2点間の飛行は、その飛行の主方向からの垂直距離がx(任意に設定できる値)より大きくなると終了します。私が持っているxy座標の位置データを使ってそれを行う方法を誰かが知っていますか?

ここに画像の説明を入力してください

4

1 に答える 1

4

アルゴリズム、数学、または R 構文です。

必要なアルゴリズムは、データの詳細によって異なる場合があります。たとえば、どのくらいのデータを持っていますか? それはどのような形式ですか?それは2Dですか、それとも3Dですか?1 つの可能性は、データ セットを反復処理することです。新しいポイントごとに、以前のすべてのポイントをチェックして、目的の列に収まるかどうかを確認する必要があります。ただし、データ セットが大きい場合、これは非常に遅くなる可能性があります。最悪のシナリオでは、すべてのデータ ポイントが 1 つのフライト セグメントにあります。つまり、最初のポイントはデータ ポイントと同じ回数、2 番目のポイントは 1 少ない回数だけチェックすることになります。平均 n + (n-1) + (n-2) + ... + 1 = n(n-1)/2 操作。それは O(n^2); です。動作時間は、データ セットのサイズに対して二次的に増加する可能性があります。したがって、より洗練されたものが必要になる場合があります。

ポイントが x の目的の列内にあるかどうかを確認する計算は非常に簡単ですが、より洗練された計算がより良いアルゴリズムを通知するのに役立つ可能性があります。1 つのアプローチは、ベクトル演算を使用することです。例を挙げると、点 A、B、および C があるとします。目標は、B が A から C へのベクトルの周りの幅 x の列に収まるかどうかを確認することです。これを行うには、C に直交するベクトル v を見つけます。次に、A から B へのベクトルの v へのスカラー射影の大きさが x より小さいかどうかを調べます。この種のことについては、参考になる文献がたくさんあります。ここに 1 つの例を示します。

これを判断するR関数のように見えるので、ここから(個々のポイントのブール関数を使用して)始めることができると思います。次に、ポイントのセットを取得してベクトル v を計算し、セット内の各ポイントに対して最初の関数を呼び出す別の関数。次に、いくつかのデータを実行して、所要時間を確認します。

R の構文は、私の学びたいことのリストに入っていますが、残念ながらあまり役に立ちません。昨夜、R のマニュアルを調べたところ、役立つ例がたくさんありました。私のようなR初心者でも、これは非常に実行可能だと思います。大きなデータセットがある場合は、少し遅くなる可能性があります。ただし、機能するものがあれば、より多くの知識と経験を持つ人々から助けを得て最適化する方が簡単な場合もあります。


役立つ場合の 2 つの簡単な明確化ポイント:

  1. 上記の提案は、1 匹の動物のデータから始めるためのものです。そのため、データの増加について話すときは、1 匹の動物の平均データ サンプル サイズについて話しているのです。それが遅い場合は、まずそれを修正する必要があります。次に、後で複数の動物を処理するためのアルゴリズムを潜在的に分析/最適化する必要があります。
  2. フライト セグメントの定義は、列のルールに違反する「サブ」フライト セグメントがない連続したデータ ポイントの最大のサブセットであると暗黙のうちに想定しています。つまり、一連の点がベクトルの周りの幅 x の列内に最後の点まで収まるという規則を満たす例を思いつくことができると思いますが、ベクトルを最後から 2 番目のポイントに移動すると、1 つのポイントが基準を満たさなくなります。フライト セグメントをどのように定義するかによって(たとえば、条件を満たし、内部で何が起こるかを気にしない最大の可能なポイント セットにしたい場合)、別のことが必要になる場合があります (たとえば、前方ではなく後方に作業する)。 )。
于 2013-03-04T14:54:52.887 に答える