スクリプトのヘルプが必要 - 傾きが最大になる線形フィット<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私は、96 ウェル プレートのウェル内の液体増殖培地における細菌の増殖を研究しています。 以下のように、指数関数的成長段階における直線の傾きである最大成長率を取得したいと考えています。

私がしなければならないことは、直線が最大の傾きを持つ 10 個のデータ ポイントに適合するように、両方向からデータを切り取ることです。

私の各データ テーブルには、文字番号指定 (「ウェル」) で示されたこれらの曲線が 96 個あります。

Y 軸データは自然対数変換された「(Ln OD 600」)、X 軸データは時間単位 (「Time [hrs]」) です。 現在、Fit Y by X プラットフォームを使用し、Y 応答に「Ln OD 600」、X 係数に「Time [hrs]」、By-box に「Well」を入れるスクリプトを作成しました。 そこで、96 個の異なるグラフを含むレポートを取得します。各グラフに線を当てはめ、「時間 [時間]」を使用してローカル データ フィルターを開き、10 個のデータ ポイント/一致する行にカットします。

次に、そのフィルター/スライダーを時間をかけて手動でスライドさせて、線の最大の傾きを見つける必要があります。 データ ファイルが数百個あるので、これを行うには膨大な時間がかかります。

私がやろうとしているのは、時間の経過とともにスライダーを自動的に動かし、線の最大の傾きを見つけるスクリプトを作成することです。 残念ながら、スクリプト作成とコーディングは私のスキルセットの 1 つではないため、困惑しています。 現時点での JSL スクリプトを添付しました。 助けや考えをありがとう!
Re: スクリプトのヘルプが必要です - 傾きが最大の場合の線形フィット
こんにちは、ジム -
上のグラフに例示されているデータの範囲全体にわたる最大の傾きを見つけるには、スクリプトをどのように変更しますか?スクリプトを変更しようとしましたが、行が適切に除外されませんでした。 OPと同じ形式です。各「ウェル」は同様の波形を持ちます。
ありがとう、
ドリュー
Re: スクリプトのヘルプが必要です - 傾きが最大の場合の線形フィットジム、
これは素晴らしい! 1 つの完全なデータセットに対して実行したところ、スクリプトによって計算されたラインの傾きは、R 二乗が 0.98 で手動で計算された傾きと相関しています。 わずかな違いは、手作業で計算する際の誤差によるものだと思います。 もう少し加工してみますが、これはまさに私が必要としていたもののようです。すでに分析したデータ ファイルの一部でパフォーマンスを確認したら、再度投稿します。
助けてくれて本当にありがとう、
ネイサン
Re: スクリプトのヘルプが必要です - 傾きが最大の場合の線形フィットデータに対してこのスクリプトを試して、希望のものに近いかどうかを確認してください。
デフォルトの名前はここにあります( 1 ) ;
// データテーブルを開きます
dt =現在のデータテーブル() ;
要約する( dt 、井戸リスト=に( :良い) ) ;
dt <<列ごとに色を付ける( :良い) ;
// 各ウェルのデータを通過し、連続する最良の 10 ポイントを見つけます
// 最適な傾斜を使用して
ために(私= 1 、私<= N 個のアイテム(井戸リスト) 、私++、
// 最も傾きの高い決定された 10 個のデータ ポイントを含むようにリストを設定します。
dt <<場所を選択してください( :良い==井戸リスト[私] ) ;
ベストベータ= 0 ;
スタートロウ= 0 ;
みんな= : Ln OD 600 [ dt <<選択された行を取得する】 ;
キオール= :時間[ dt <<選択された行を取得する] ;
ために( k = 1 、 k <= N 行(キオール) - 10 、 k ++、
バツ=キオール[ k :: k + 9 ] ;
バツ= J ( N列(バツ) 、 1 、 1 ) ||バツ;
y =みんな[ k :: k + 9 】 ;
// 回帰計算
エックスプシー=逆数(バツ` *バツ) ;
ベータ=エックスプシー*バツ` * y ;
もしも(腹筋(ベータ[ 2 】 ) >ベストベータ、
ベストベータ=腹筋(ベータ[ 2 ] ) ;
スタートロウ= ( dt <<選択された行を取得する)[ k ] ;
) ;
) ;
ために( k =分( dt <<選択された行を取得する) 、 k <=マックス( dt <<選択された行を取得する) 、 k ++、
もしも(スタートロウ<= k <=スタートロウ+ 9 、
行の状態( k ) =除外された状態( 0 ) 、行の状態( k ) =除外された状態( 1 )
) ;
) ;
) ;
// グラフィック出力を作成します
二変量( Y ( : Ln OD 600 ) 、バツ( :時間) 、グループ化( :良い) 、フィットライン( 1 ) ) ;
Re: スクリプトのヘルプが必要です - 傾きが最大の場合の線形フィットジム、
素晴らしい、ありがとう! おそらくそれを明確にしていませんでした。 これは私にとってスクリプト作成への初めての挑戦です。 助けてくれてありがとう、
ネイサン
Re: スクリプトのヘルプが必要です - 傾きが最大の場合の線形フィット異なる Well 値がそれぞれ異なる列にあると考えたのは私の間違いでした。ニーズに合わせてスクリプトを変更するのは、大がかりなプロジェクトではありません。明日の午後までは到着できませんが、その時にはお届けします。
Re: スクリプトのヘルプが必要です - 傾きが最大の場合の線形フィットジム、
返信と感想ありがとうございます! スクリプトを変更してテーブルに適用し、実行することができました。 ただし、実際には、各曲線を X 軸として時間をプロットするときに、各曲線に線を適合させる必要があります。 次に、最大の勾配を生成する 10 個の連続したポイント (時間に従って連続している) を選択する必要があります。 それについて明確でなかったら申し訳ありません。 基本的に、各ポイント間に 10 分の間隔がある場合、ラインの傾きが最も大きい 100 分の期間を探します。
これは私のデータシートのスナップショットです。 基本的に、「Well」列には 96 個の文字と数字の組み合わせの識別子があります。 各識別子には 140 行ほどの行があります。 次に、x に「Time [hrs]」、y に「OD 600」をプロットし、[By] ボックスに「Well」をプロットします。 それは役に立ちますか?

ダイアログボックスは次のとおりです。

助けてくれて本当にありがとう!
〜ネイサン
Re: スクリプトのヘルプが必要です - 傾きが最大の場合の線形フィットこれはあなたが望むことを行うと思われるスクリプトです。Big ClassというJMPサンプルデータテーブルを使用した例として設定しています。ただし、実行対象のデータ テーブルをスクリプトで指定し、Y Var = "age"; を変更した場合は、実行したい Y 列に移動すると、必要なものが得られるはずです。このスクリプトには 2 つの前提条件があります。1 つ目は、データ テーブル内のすべての数値の連続列が分析されるということです。 2 番目の仮定は、列内のデータが X 変数によって順序付けされているということです。そうでない場合は、スクリプトを変更してその状況に対処できます。処理時間が増えるだけです並べ替えを行うようにスクリプトを変更しました。
デフォルトの名前はここにあります( 1 ) ;
// データテーブルを開きます
dt =開ける( "$SAMPLE_DATA/Big Class.jmp" ) ;
Y 変数= "年" ;
// データを行列に取り込む
ColList = dt <<列名を取得する(継続的な、弦) ;
// リストから Y 変数を削除します
ColList =削除( ColList 、含まれています( ColList 、 Y 変数) 、 1 ) ;
// 最も傾きの高い決定された 10 個のデータ ポイントを含むようにリストを設定します。
最高のデータ= {} ;
ベストイース= {} ;
列名= {} ;
ベストベータ= 0 ;
スタートロウ= 0 ;
// 列全体をループします
ために(私= 1 、私<= N 個のアイテム( ColList ) 、私++、
// データが昇順 X になるようにデータを並べ替えます。
dt <<選別(に(コリスト[私】 ) 、注文(上昇) 、テーブルを置き換える( 1 ) ) ;
みんな=桁( Y 変数) <<値の取得;
キオール= (桁( dt 、コリストする[私】 ) <<値の取得) ;
ために( k = 1 、 k <= N 行(キオール) - 10 、 k ++、
バツ=キオール[ k :: k + 9 ] ;
バツ= J ( N列(バツ) 、 1 、 1 ) ||バツ;
y =みんな[ k :: k + 9 】 ;
// 回帰計算
エックスプシー=逆数(バツ` *バツ) ;
ベータ=エックスプシー*バツ` * y ;
もしも(腹筋(ベータ[ 2 】 ) >ベストベータ、
ベストベータ=腹筋(ベータ[ 2 ] ) ;
スタートロウ= k ;
) ;
) ;
最高のデータ=最高のデータ||リストとして(キオール[スタートロウ::スタートロウ+ 9 】 ) ;
ベストイース=ベストイース||リストとして(みんな[スタートロウ::スタートロウ+ 9 】 ) ;
ために( k = 1 、 k <= 10 、 k ++、
に挿入(列名、 ColList [私】 )
) ;
) ;
// すべての列の最高 10 ポイントを含む新しいデータ テーブルを作成します
一緒に=新しいテーブル( "結果" 、
新しい列( 「列名」 、キャラクター、価値観(列名) ) 、
新しい列( 「よ」 、価値観(ベストイース) ) 、
新しい列( "データ" 、価値観(最高のデータ) )
) ;
// グラフィック出力を作成します
一緒に<<列ごとに色を付ける( :列名) ;
二変量( Y ( : Y ) 、バツ( :データ) 、グループ化( :列名) 、フィットライン( 1 ) ) ;