いくつかの行の幾何平均を計算するにはどうすればよいでしょうか?幾何平均は「要約」で簡単に求めることができます。
しかし、数式列で平均を計算するにはどうすればよいでしょうか?
ヘルプドキュメントとコミュニティを検索しましたが、それでも方法が見つかりませんでした。


このように計算したいのですが:
dt=Current Data Table();
dt<<NEW column=""></NEW>
ありがとう!
Re: いくつかの行の幾何平均を計算するにはどうすればよいですか?また、非常に有益な SAS ドキュメントの幾何平均に関するブログ投稿をここに再リンクします。
https://blogs.sas.com/content/iml/2019/10/02/geometric-mean-deviation-cv-sas.html
Re: いくつかの行の幾何平均を計算するにはどうすればよいですか?ここで私が考える有用な戦略は、一般的に概要統計で報告される一般的な幾何平均の計算に興味がある場合に、JMP の「NRows()」関数を使用して行番号のインデックス付けを呼び出すことです (これは、要約統計量で報告される一般的な幾何平均の計算です)。 JMP は「要約統計のカスタマイズ」でレポートします)。


このスレッドで使用された 2 つのアプローチを要約 (再現) することができました。また、将来の参考のために汎用データセットのデータ テーブルを含めます。乾杯、 @パトリックジュリアーノ
Re: いくつかの行の幾何平均を計算するにはどうすればよいですか?ありがとう@ジュリアン
すべてを一度に実行しようとしましたが、次の図のように機能しませんでした。

Re: いくつかの行の幾何平均を計算するにはどうすればよいですか?こんにちは@ron_horne 、
あなたの質問に対して:「最初の ln 変換を 2 番目の式に埋め込み、2 列のプロシージャを保存する方法はありますか。」
最初は、プラットフォーム起動時のスクリプト作成と同じように、Transform Column() を使って何かできるのではないかと考えました。
Transform Column( "Log[height]", Formula( Log( :height ) ) )
しかし、それを列の数式に埋め込んでも何も解決しませんでした。 ただし、:高さ[索引(行() - 10 、行() )] は行列を返し、それを Ln() でラップすると各項目が評価されるため、次のようにしてソリューションの単一列バージョンが得られます。
New Column("Geometric mean height (single column)", Numeric, "Continuous", Format("Best", 12), Formula(If(Row() < 10, Empty(), Exp(Mean(Ln(:height[Index(Row() - 10, Row())]))))) );

@ジュリアン
Re: いくつかの行の幾何平均を計算するにはどうすればよいですか?こんにちは@lwx228 、
あなたの質問は良い質問であり、答えを得る方法がいくつかあるはずです。私は列式を使用することに固執しようとします。
2 つの新しい列を作成します。
1 高さを自然対数に変換するだけです。
2 最初の列の移動平均の指数を取得します。
この 2 番目の列により、探している移動幾何平均が得られます。
このスクリプト部分から数式を取得できます。
New Column( "log height",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Ln( :height ) )
);
New Column( "Geometric mean height",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() < 10,
Empty(),
Exp( Mean( :log height[Index( Row() - 10, Row() )] ) )
)
)
);
うまくいくかどうかお知らせください。
また、フォーラムの他のメンバーに、最初の ln 変換を 2 番目の式に埋め込んで 2 列の手順を保存する方法があるかどうかを尋ねたいと思います。
Re: いくつかの行の幾何平均を計算するにはどうすればよいですか?元の方法を使用しましたが、結果は一貫していました。

ジムさん、ありがとう!
Re: いくつかの行の幾何平均を計算するにはどうすればよいですか?JMP の幾何平均関数については知りません。1 つ追加する必要があります。それを JMP WishList に追加することをお勧めします。ただし、それは自分のやりたいことができないという意味ではありません。2つの異なる解決策を思いつきました。1 つ目は、JSL での幾何平均の生のコーディングです。添付のデータ テーブルでは、GeoMean という列でその式が使用されています。リクエストを使用して、現在の行 (現在の行までの 10 行) の幾何平均を計算します。
If( Row() == 1,
Product = 1;
Range = 11;
);
If( Row() <= 11,
Product = Product * :height;
If( Row() == Range,
Returned = Product ^ (1 / Range),
Returned = .
);
,
Product = Product / :height[Row() - Range];
Product = Product * :height[Row()];
Returned = Product ^ (1 / Range);
);
Returned;
2 番目の形式である Dist Platform の Geomean という列は、Distribution Platform の出力から幾何平均を抽出し、データのサブセットに対して実行し、一度に 11 行をサブセット化します。
If( Row() < 11,
returned = .,
theValues = :height[Index( Row(), Row() - 10 )];
_d = New Table( "sub", invisible, New Column( "height", values( theValues ) ) );
dis = _d << Distribution(
invisible,
Continuous Distribution(
Column( :height ),
Quantiles( 0 ),
Histogram( 0 ),
Vertical( 0 ),
Outlier Box Plot( 0 ),
Customize Summary Statistics(
Mean( 0 ),
Std Dev( 0 ),
Std Err Mean( 0 ),
Upper Mean Confidence Interval( 0 ),
Lower Mean Confidence Interval( 0 ),
N( 0 ),
Geometric Mean( 1 )
)
)
);
Returned = (Report( dis )[Number Col Box( 1 )] << get)[1];
Close( _d, nosave );
);
Returned;
最初の式は、行ごとに地理平均値を最初から計算するわけではないため、最も高速になります。