データのサブセットの平均を取得するやあ、
ある範囲の波長 (400 ~ 600 nm) で 3 つの異なる時点 (0、1、3 時間) で採取された 4 つの処理済みサンプルと 5 つの未処理サンプルの強度があります。
長期的には、未処理サンプルの 400nm での平均強度が各時点で 1 になるようにデータを正規化しようとしています。 そのためには、未処理の 0、1、3 時間の平均 400nm 強度を取得する方法を理解する必要があります。
これは私の現在のコードです:
Col Mean(
:Intensity,
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
)
私が作成したグラフ (および Excel ピボット シート) から、値は 1 時間で約 0.72 になるはずであることがわかっていますが、ほとんどの行で 1.3 が得られます。 また、3 つの「and」ステートメントを満たす行では 0.68 が得られますが、Excel ピボット シートでは時々おかしな正規化が行われることはわかっているので、その違いを懸念しているかどうかはわかりません。
コードの一貫性を保つための提案をいただければ幸いです。
Re: データのサブセットの平均を取得するどうでも :)
列平均 ( :身長、 :年齢)
ありがとう
Re: データのサブセットの平均を取得するジム、
Example 列に、行内の人の年齢だけの身長の列平均を保持するにはどうすればよいでしょうか?
たとえば、サンプル データでは、ケイティは 12 歳です。彼女の [例] 列には 12 歳だけの平均身長の列を含めたいと思います。また、13 歳のアリスの場合は、彼女の [例] 列に列の平均を含めたいとします。ちょうど13歳の身長です。
年齢ごとにネストされた if を使用するよりも簡単な方法があることを願っています。
ありがとう、
マーク
Re: データのサブセットの平均を取得する最終的に 2 番目のオプションを使用することになりましたが、計算には正規化係数を手動で入力する必要があります... 最終的なコードは次のようになります。
If( :Time == 0,
:Intensity / 1.11175075,
If( :Time == 1,
:Intensity / 0.772546829268293,
If( :Time == 3,
:Intensity / 1.2335052,
"Error"
)
)
Re: データのサブセットの平均を取得するこれはうまくいきましたが、同じ型であると思われるすべての行に特定の値を適用する(Excel で $$ を使用するようなもの)のは簡単ではありません。
これは単なるソフトウェアの違いだと思うので、その違いに慣れる必要があります。
Re: データのサブセットの平均を取得するおそらくこれは明白ですが、今概説したものよりも単純であるように思えます。あなたの例を使用して、Col Mean( :Intensity, :Time Period, :Treatment, :Wavelength ) という式を使用して新しい列を作成しました。スクリプトを回避できる場合、そしてここで回避できる場合はスクリプトを使用しません。Col Mean 関数 (統計グループ内) を使用すると、多数のグループ化変数の関数として平均を計算でき、表示したとおりの表が作成されます。
Re: データのサブセットの平均を取得するやあ、
あなたの質問が正しく理解できれば、1 つ以上のグループ化列によって特定の列の平均統計を計算することを求めていることになります。
添付のサンプル データ テーブルでは、2 つの異なるアプローチを使用してこれを行う方法を示すために、2 つのスクリプトを保存しました。 「Trt と期間および波長による平均」というタイトルのセクションでは、ローカル データ フィルターを使用してピボット テーブルを作成し、さまざまな期間、治療、波長の平均強度を確認できます。 ローカル データ フィルターは条件付きで適用できるため (赤い三角オプションの下にある [条件付き] を使用)、カテゴリを選択すると、次の列フィルターのカテゴリが、選択したカテゴリに含まれるカテゴリのみに制限されます。
Tabulate (pivot table) with local data filterTabulate (pivot table) with local data filterローカル データ フィルターを使用した表作成 (ピボット テーブル)
「表の概要」というタイトルの 2 番目のスクリプトは、グループ化列として治療、期間、および波長を使用して「表」-->「概要」を使用する例です。
Tables Summary Dialog with Group ColumnsTables Summary Dialog with Group Columnsグループ列を含むテーブル概要ダイアログ
また、スクリプトを使用してピボット テーブルを実行する方法を知りたい人もいます。
Tabulate(
Show Control Panel( 0 ),
Set Format( Mean( :Intensity( 12, 1 ) ) ),
Add Table(
Row Table(
Grouping Columns( :Time Period, :Treatment, :Wavelength ),
Analysis Columns( :Intensity ),
Statistics( Mean )
)
),
Local Data Filter(
Add Filter(
columns( :Wavelength, :Time Period, :Treatment ),
Where( :Time Period == "0" ),
Display( :Treatment, Size( 309, 232 ), List Display )
)
)
)
そして最後に、対応する JSL を含む [テーブル] --> [概要] を表示します。
Data Table( "Getting an average of a subset of data.jmp" ) <<
Summary(
Group( :Time Period, :Treatment, :Wavelength ),
Mean( :Intensity ),
Freq( "None" ),
Weight( "None" )
)
これはあなたが期待しているものに近いものですか?
一番、
スタン
Re: データのサブセットの平均を取得するこれを機能させるために設定する必要があるさまざまな条件を完全に詳細に追跡しているわけではありませんが、答えを生成するために機能する方法を説明できると思われる例をまとめました。必要です。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Example",
formula(
If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13,
Col Mean( If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13, :height, . ) ),
.
)
)
);
式を見てみましょう。 応答を得るために 2 つの異なる決定を使用しました。 まず、性別と年齢の特定の組み合わせが満たされる行のみ、平均を計算する必要があります。 これらの詳細が満たされていない場合、値は欠損値になるはずです。 最初の決定が正しい場合に 2 番目の決定が実行され、列の平均を計算しますが、性別と年齢の組み合わせの特定の値が true である値のみが含まれます。
Re: データのサブセットの平均を取得するいいえ、これは私が期待していたものではありません。
すべてを使用して強度の平均値を取得しようとしているだけです
時間は 1 時間、波長は 400、そして
治療(I@1,400,N)。 0 時間と 3 時間も同じことを行います (I@ 0、400、N および
I@3,400,N)
最終的には if ステートメントを使用して時間を確認する数式を作成します
行の強度を時間で割ります。
適切な「I@」値。
だいたい:
t = 0 の場合、I/I@0,400,n
それ以外の場合、t= 1、I/I@1,400,n
それ以外の場合、t = 3、I/I@3,400,n
それ以外の場合エラー
私がやろうとしていることをよりよく説明できることを願っています。
Re: データのサブセットの平均を取得するコードが実際に何を行っているかを解釈しているかどうかはわかりません。 Col Mean() 関数内の 2 番目の要素は、「By」ステートメントです。 つまり、コード化した方法では、次の条件を満たすすべての rew の強度の 1 つの平均が計算されます。
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
そして、その基準を満たさないすべての行について、それらすべての行の強度の平均が計算されます。 したがって、数式を適用すると、2 つの異なる値のうち 1 つだけが生成されます。 これはあなたが期待していることですか?