列ではなく、データの行に対して勾配を求める<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />データは、行をまたいで、時間の経過とともに件名別に表示されます。 次の例を見てください。
<SPAN class="number token" style="color: #008080; font-weight: bold;">subject(001) data -0.069965723</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">0.492749371</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">0.955245597</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">1.346963522</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">1.701118239</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">2.523141195</SPAN> columns _1 _2 _3 _4 _5 _8
私は斜面が必要とされる何千ものそのような列を持っています。
私が本当に必要としているのは、列の各数列の傾きだけです。
各系列に続く新しい追加の列には、その特定の系列の勾配値が含まれているはずです。
SASがこれを処理できるかどうかSASフォーラムで尋ねました。 JMPはできますか?任意の助けは大歓迎です。
ニコラス
再:列ではなくデータの行の傾きを求めるこれは別の方法です。 スクリプトには、JMPを対話式に実行した場合と同じことが重複しているという点で、1つの利点しかありません。 スクリプトを開発したサンプルデータテーブルを添付しました。
//サンプルデータへのポインタを設定します
デフォルトの名前はここ ( 1 ) ;
dt = 現在のデータテーブル () ;
//各行から6つのデータ列を積み重ねる
積み上げ = dt << スタック (
列( : _3 、 : _4 、 : _5 、 : _6 、 : _7 、 : _8) 、
ソースラベル列( "ラベル" ) 、
スタックデータ列( "データ" )
) ;
//時間係数を表す新しい列を作成します
積み上げ << 新しい列 ( "時間" 、式( 数 ( 小計 ( : ラベル 、 2 、 1 )) - 2 )) ;
//データを行ごとに分析します(学生)
バイブ = 積み上げ <<二変量 (見えない 、
Y( : データ) 、
バツ( : 時間) 、
フィットライン({ラインカラー({ 213 、 72 、 87 )) 、
(_1)まで
) ;
//見積もり出力からデータテーブルを作成します
dtslope = 報告書 (バイブ[ 1 ])[ 「パラメータ推定値」 ] [ 1 ] <<結合データ表を作成します。
//切片データを削除します
dtslope <<場所を選択 ( : 期間 == 「傍受」 ) ;
dtslope <<行を削除します。
//不要な列を選択して削除します
dtslope : バツ <<選択したセット ( 1 ) ;
dtslope : よ <<選択したセット ( 1 ) ;
dtslope : 期間 <<選択したセット ( 1 ) ;
dtslope : 名 ( 「〜バイアス」 ) <<選択したセット ( 1 ) ;
dtslope : 標準エラー <<選択したセット ( 1 ) ;
dtslope : t比 <<選択したセット ( 1 ) ;
dtslope : 名 ( "prob> | t |" ) <<選択したセット ( 1 ) ;
dtslope <<列を削除します。
// Estimate列の名前をSlopeに変更します
dtslope : 見積もり <<セット名 ( "スロープ" ) ;
//勾配を元のデータテーブルに追加します
dt << 更新 (
と(dtslope) 、
マッチカラム( : _1 = : _1)
) ;
再:列ではなくデータの行の傾きを求める列間の勾配を計算する列式の例を次に示します。X値が何であるかは明確ではありませんが、それらはあなたの例のように列名によって定義されると思います。ご覧のとおり、X行列はハードコーディングされています。X値が最初の行(またはテーブル変数)などに保持されている場合、式はより一般的になる可能性があります。
//テーブル例
dt = 新しいテーブル ( "Slope_Across_Columns.jmp" 、
行を追加 ( 2 ) 、
新しいコラム ( 「件名」 、キャラクター 、値 ({ "001" 、 "002" )) 、
新しいコラム ( "_1" 、値 ([[ - 0.069965723 、 2 ])) 、
新しいコラム ( "_2" 、値 ([[ 0.492749371 、 4 ])) 、
新しいコラム ( "_3" 、値 ([[ 0.955245597 、 6 ])) 、
新しいコラム ( "_4" 、値 ([[ 1.346963522 、 8 ])) 、
新しいコラム ( "_5" 、値 ([[ 1.701118239 、 10年 ])) 、
新しいコラム ( "_8" 、値 ([[ 2.523141195 、 16 ]))
) ;
//式の表現
F = 評価エキス (
地元 ({ 私 = 1 、 n = 経験値 ( Nコル ( 現在のデータ表 ()) - 1 ) 、バツ = J ( n 、 1 、 1 ) || [ 1 、 2 、 3 、 4 、 5 、 8 ] 、 Y } 、
Y = マトリックス ( 繰り返す ({ 私 ++ ; カラム ( 私 )[]} 、 n )) ;
( 逆 ( バツ ` * バツ ) * バツ ` * Y )[ 2 ] ;
)
) ;
//数式列を追加
dt << 新しいコラム ( "スロープ" 、数値 、式 ( 名前Expr ( F ))) ;
再:列ではなくデータの行の傾きを求めるこんにちはンコルマニク 、
答えはイエスです。
一般に、データを転置して計算をする必要があります。データテーブルが大きすぎると仮定すると、行列を転置する方が簡単だと思います。したがって、一般的なプロセスでは、データを行列に抽出し、転置して勾配を計算します。これを見てください。説明のために、すべての異なる手順を実行します。それは(あなたが欠けている値を持っているならば)あまり堅牢ではないか、あるいは何か面白いことではありません。
ベスト、
ロン
//データテーブルを作成します
dt = 新しいテーブル ( 「行内データ」 、
行を追加する ( 100 ) 、
新しい列 ( 「件名」 、式 ( 行 ())) 、
新しい列 ( "スロープ" ) 、
新しい列 ( "R2" ) 、
複数の列を追加 ( "カラム" 、 20 、数値 )
) ;
//データ列の値を設定します
にとって ( 私 = 4 、私 <= 23 、私 ++、
: カラム ( 私 ) << 式 ((( 私 / 2 ) + ランダムノーマル ()) << 評価式 << 式を削除 ;
) ;
// 働き始める
//テーブルを行列として取得します
データマトリックス = dt << GetAllColumnsAsMatrix ;
//回帰計算に使用されていない列(列1〜4)を削除する
データマトリックス [ 0 、 1 :: 3 ] = [] ;
//行列を転置する
データ = データマトリックス `;
//時間のためにx変数を作ります。
バツ = ( 1 :: ncol ( データマトリックス )) `;
//切片項に1の列を追加します
バツ = J ( Nrow ( バツ ) 、 1 ) || バツ ;
//これで、計算に必要なすべてのデータが行列形式で得られました
にとって ( アイロー = 1 、アイロー <= 眉 ( dt ) 、アイロー ++、 //各行に
//個々のデータを一つずつ抽出する
Y = データ [ 0 、アイロー ] ;
//最小二乗推定値を計算する
β = Inv ( バツ `* バツ ) * バツ `* Y ;
dt : スロープ [ アイロー ] = β [ 2 ] ;
// R2を計算
N = NRows ( Y ) ;
Ybar = 平均 ( Y ) ;
R2 = ( β `* バツ `* Y - N * Ybar ^ 2 ) / ( Y `* Y - N * Ybar ^ 2 ) ;
dt : R2 [ アイロー ] = R2 ;
) ;