<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
私はデータセットを持っています:
x = 時間
y = 樹木の平均水使用量 [データ損失による 3、2、または 1 つの値のうち]
このサイクルは、その時点 (1 日 24 時間) の月間繰り返され、毎日 "y" は異なるパターンを持ちます。 以下は 3 日間のサンプル データです。

時間を合計するのは簡単な方法ですが、水の使用量が 1 時間ずっと同じであると仮定します [間違った仮定]。
「y」の解像度が1時間にならないように、各曲線の下の領域を統合するより良い方法はありますか?
モデルライブラリからさまざまな非線形モデルを当てはめてみましたが、どれも好ましい結果をもたらさず、「y」の曲線形状の日々の変化に適応させることはできません。
次に、Gaussian Process を試して、解像度を上げることができるかどうかを確認します。
ありがとう、
-JGL
これは、面積の新しい列を提供する関数です。レポートを開いているときに実行できるほどスマートではないので、ウィンドウがソートできることを確認してください。
関数を実行してから riemann_sum() を呼び出すだけです。
riemann_sum =関数(
{dt =現在のデータ テーブル()、xcol = "選ぶ" 、ycol = "選ぶ" 、bycol = "選ぶ" }、
{DEFAULT ローカル},
現在のデータ テーブル( dt );
もしも( xcol == "選ぶ" 、
nc = N コル( dt );
ポンド幅 = 130 ;
nw =新しい窓( 「ライマン・スム」 、
<<モーダル、
ボーダーボックス(左( 3 )、 上( 2 )、
Ⅴリストボックス(
テキストボックス( 「曲線下の面積を取得します」 )、
H リストボックス(
Ⅴリストボックス(
パネルボックス( 「列の選択」 、
colListData =列リストボックス(すべて、幅(lbWidth)、nLines(分( nc 、 10 ) ) )
)、
)、
パネルボックス( 「選択した列をロールにキャスト」 、
ラインナップボックス( N コル( 2 )、間隔( 3 )、
ボタンボックス( 「よ、コラムス」 , colListY <<追加( colListData << GetSelected ) ) 、
colListY =列リストボックス(
幅(lbWidth)、
nLines( 1 )、
maxselected( 1 )、
minItems( 1 )、
「数値」
)、
ボタンボックス( "バツ" 、colListX <<追加( colListData << GetSelected ) ) 、
colListX =列リストボックス(
幅(lbWidth)、
nLines( 1 )、
maxselected( 1 )、
minItems( 1 )、
「数値」
)、
ボタンボックス( "に" , colListB <<追加( colListData << GetSelected ) ) 、
colListB =列リストボックス( width( lbWidth ), nLines( 1 )、最大選択( 1 ) )
)
)、
パネルボックス( "アクション" 、
ラインナップボックス( N コル( 1 )、
ボタンボックス( "OK" 、
ycol =桁((colListY <<アイテムを入手)[ 1 ]);
xcol =桁((colListX <<アイテムを入手)[ 1 ]);
nby =アイテム(colListB <<アイテムを入手);
もしも(ちなみに、
bycol =桁((colListB <<アイテムを入手)[ 1 ])、
bycol =新しい列( 「フェイクビー」 、 方式(チャー( 1 )));
);
)、
ボタンボックス( "キャンセル" 、nw <<ウィンドウを閉じる)、
テキストボックス( " " )、
ボタンボックス( "削除" 、
colListY <<削除選択;
colListX <<削除選択;
colListB <<削除選択;
)、
)
)
)
)
)
);
);
要約する( list_by = By( bycol ) );
dt <<選別( // x が正しい順序になるように並べ替えます
By( bycol, xcol ),
Order(昇順、昇順)、
テーブルを置換
);
list_valuesx = xcol <<値を取得する;
list_valuesy = ycol <<値を取得する;
待って( 0.1 );
ああ=連想配列();
ために( i = 1 、私 <= Nアイテム( list_by )、i++、
dt <<選択をクリア;
list_rows = dt <<行を取得する場所( bycol[行()] == list_by );
//dif_x と sum_y は魔法が起こる場所です
dif_x = list_valuesx[list_rows[ 2 :: ( N行( list_rows ))]] - list_valuesx[list_rows[ 1 :: (
N行( list_rows ) - 1 )]];
sum_y = .5 * (list_valuesy[list_rows[ 2 :: ( N行( list_rows ))]] + list_valuesy[list_rows[ 1 :: (
N行( list_rows ) - 1 )]]);
aa[list_by ] =和( dif_x
sum_y );
);
dt <<新しい列( "積分" 、数値、連続、数式( aa[bycol[行()]] ) );
桁(dt、 "積分" ) <<数式を削除; // 作ってから殺すので、aa はローカルにとどまることができます
もしも(!nby, dt<<列を削除({bycol}));
);
これを行う最良の方法は、リーマン和です。すべての x 間隔が同じである場合は、合計を実行して間隔を掛けることができます。
したがって、その日のすべてのポイントを合計し、この場合は 1 を掛けます。