查找一行數據的斜率,而不是列<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能否?任何幫助將不勝感激。
尼古拉斯
Re:找到一行數據的斜率,而不是列這是另一種方法。 它只有一個優點,因為腳本只是複制了交互式運行JMP所能做的事情。 我附上了一個我開發腳本的示例數據表。
//設置指向樣本數據的指針
名稱默認為此處 ( 1 ) ;
DT = 當前數據表 () ;
//堆疊每行的6個數據列
堆疊 = DT << 堆 (
列( : _3 , : _4 , : _5 , : _6 , : _7 , : _8) ,
源標籤列( “標籤” ) ,
堆疊數據列( “數據” )
) ;
//創建一個表示時間因子的新列
堆疊 << 新欄目 ( “時間” ,式( 民 ( SUBSTR ( : 標籤 , 2 , 1 )) - 2 )) ;
//按行(學生)對數據運行分析
BIV = 堆疊 <<雙變量 (無形 ,
Y( : 數據) ,
X( : 時間 ) ,
擬合線({線條顏色({ 213 , 72 , 87 })}) ,
由(_1)
) ;
//從估算輸出中創建數據表
dtslope = 報告 (BIV [ 1 ])[ “參數估計” ] [ 1 ] <<製作組合數據表;
//擺脫攔截數據
dtslope <<選擇哪裡 ( : 術語 == “截距” ) ;
dtslope <<刪除行;
//選擇不需要的列並刪除它們
dtslope : X <<集選 ( 1 ) ;
dtslope : ÿ <<集選 ( 1 ) ;
dtslope : 術語 <<集選 ( 1 ) ;
dtslope : 名稱 ( “〜偏見” ) <<集選 ( 1 ) ;
dtslope : 標準錯誤 <<集選 ( 1 ) ;
dtslope : 比率 <<集選 ( 1 ) ;
dtslope : 名稱 ( “概率> | T |” ) <<集選 ( 1 ) ;
dtslope <<刪除列;
//將Estimate列重命名為Slope
dtslope : 估計 <<集名 ( “坡” ) ;
//將斜率添加到原始數據表
DT << 更新 (
用(dtslope) ,
匹配列( : _1 = : _1)
) ;
Re:找到一行數據的斜率,而不是列以下是計算跨列斜率的列公式的示例。目前尚不清楚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 = Eval Expr (
本地 ({ 一世 = 1 , ñ = EXPR ( N Col ( 當前數據表 ()) - 1 ) , X = Ĵ ( ñ , 1 , 1 ) || [ 1 , 2 , 3 , 4 ,五 , 8 ] , ÿ } ,
ÿ = 矩陣 ( 重複 ({ 一世 ++ ; 柱 ( 一世 )[]} , ñ )) ;
( 逆 ( X ` * X ) * X ` * ÿ ) 2 ] ;
)
) ;
//添加公式列
DT << 新欄目 ( “坡” ,數字 ,式 ( 名稱Expr ( F ))) ;
Re:找到一行數據的斜率,而不是列嗨 nkormanik ,
答案是肯定的。
通常,您需要轉置數據並進行計算。假設數據表太大,我認為更容易轉置矩陣。因此,該過程通常涉及將數據提取到矩陣中,對其進行轉置併計算斜率。看看這個。它為了說明的目的做了所有不同的步驟。它不是很強大(如果你有缺失值)或任何有趣的東西。
最好,
羅恩
//創建一個數據表
DT = 新表 ( “行中的數據” ,
添加行 ( 100 ) ,
新欄目 ( “學科” ,式 ( 行 ())) ,
新欄目 ( “坡” ) ,
新欄目 ( “R2” ) ,
添加多個列 ( “柱” , 20 ,數字 )
) ;
//設置數據列的值
對於 ( 一世 = 4 ,一世 <= 23 ,一世 ++,
: 柱 ( 一世 ) << 式 (( 一世 / 2 ) + 隨機正常 ()) << 評估公式 << 刪除公式 ;
) ;
// 開工
//將表格作為矩陣
數據矩陣 = DT << GetAllColumnsAsMatrix ;
//刪除不用於回歸計算的列(第1-4列)
數據矩陣 [ 0 , 1 :: 3 ] = [] ;
//轉置矩陣
數據 = 數據矩陣 `;
//為時間製作一個x變量。
X = ( 1 :: 的NcoI ( 數據矩陣 )) `;
//為攔截術語添加一列1
X = Ĵ ( Nrow ( X ) , 1 ) || X ;
//現在我們擁有矩陣形式的計算所需的所有數據
對於 ( irow = 1 , irow <= NROWS ( DT ) , irow ++, //為每一行
//逐個提取個人數據
ÿ = 數據 [ 0 , irow ] ;
//計算最小二乘估計
β = INV ( X `* X ) * X `* ÿ ;
DT : 坡 [ irow ] = β [ 2 ] ;
//計算R2
ñ = NROWS ( ÿ ) ;
Ybar = 意思 ( ÿ ) ;
R2 = ( β `* X `* ÿ - ñ * Ybar ^ 2 ) / ( ÿ `* ÿ - ñ * Ybar ^ 2 ) ;
DT : R2 [ irow ] = R2 ;
) ;