用於保存樣條擬合殘差的腳本你好,
任何人都知道如何編寫 sava 殘差(或預測)的腳本作為樣條擬合的新列? 如果我手動執行此操作,這很容易,只需在下拉紅色三角形中選擇“保存殘差”即可。 我知道如何編寫腳本以將殘差保存為使用擬合模型進行線性擬合的新列。 但是,我經常需要使用標準化 x 樣條擬合來擬合時間趨勢數據,我不確定是否有更簡單的方法來做到這一點。 我的最終目標是在循環中獲取多個變數的殘差或預測,因此一個簡單的腳本會很有幫助。
謝謝!!

回覆:儲存樣條擬合殘差的腳本嗨吉姆
有什麼解決方案/修復可以讓我們在 v14 中保存殘差嗎?
謝謝您的協助
回覆:儲存樣條擬合殘差的腳本彭,
是的,這似乎不一致,但是,我猜測這是為了比較預測而故意這樣做的(例如,男性是基於女性的預測的保留集,反之亦然。
若要根據分組依據模型建立單列預測,請使用公式建立新列或設定每個值表達式
If( :sex=="M", 男性預測列, :sex=="F",男性預測欄);
如果您想要一個看起來像剩餘列的列,請為男性建立一個列並使用類似的表達式
If( :sex=="M", 男性預測列,empty() );
然後對女性做同樣的事情。
回覆:儲存樣條擬合殘差的腳本酷,這太棒了!!
還有一個問題:
當我做物件<SPAN class="token operator"><</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token punctuation"> (</SPAN>曲線<SPAN class="token punctuation">[</SPAN>我<SPAN class="token punctuation">]</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token messages">保存殘差</SPAN><SPAN class="token punctuation">)</SPAN>並按 (:sex) 分組,JMP 計算「M」和「F」的殘差,並保存在帶有一些空白儲存格的不同欄位中。 這就是為什麼需要「轉置」才能將所有殘差放在一列中。 但是,如果我執行 <
謝謝
回覆:儲存樣條擬合殘差的腳本我非常喜歡新的 JMP 13 表子集參考。 然而,仍然有一個簡單的方法可以透過訊息 Get as Matrix 來取得值。 關鍵語法是 dt << get as matrix( list | index )。沒有行最大值函數,但有 VMax 函數,它是列最大值。我在 JMP 12 中對此進行了測試。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ), GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
//Find how many in a group. We know it is 2 for Big Class
summarize(_by = By(:sex));
//Find out how many columns before adding residuals
ncpre = ncol(dt);
_nby = nitems(_by);
for(i=1, i<=_nby, i++,
obj << (Curve[i] << Save Residuals);
wait(0);
);
idx = ncpre+1::(ncpre+_nby);
cmat = Transpose(VMax(Transpose(dt << get as matrix(idx)))); //matrix _nby x nrow(dt)
/*the previous line of code is performing these tasks
- get the columns of residuals into a matrix of size nrow(dt) x _nby
- create the transpose: coloumns are rows and rows are columns, size _nby x nrow(dt)
- Vmax is a vertical maximum, it finds the max of each column (previously rows)
returns a 1 x nrow(dt) vector, a row vector
- transpose again so it is a column vector
*/
//create a single column of residuals
resids = dt << New Column("Weight v Height Spline Residuals",
Numeric, Continuous, Values( cmat )
);
回覆:儲存樣條擬合殘差的腳本謝謝大家的解決方案!! 這資料表多個子部分的語法在 JMP12 中不起作用。 我讀了另一篇關於傳回多行最大值的討論,類似的方法也適用於 JMP13。 有沒有更好的方法來獲取 JMP12 中多行的最大值? 寫公式來比較未知行數的行值似乎效率不高。 謝謝!
回覆:儲存樣條擬合殘差的腳本吉姆,
我注意到 JMP 14 也存在同樣的問題。JMP 支援聲明該問題已在 JMP 14.1(8 月?)中修復。
這是對吉姆腳本的一個小修改。 它創建一列殘差。 它對資料表的多個子部分使用新的(JMP 13 中)語法。 這是按行獲取剩餘列並找到最大值(實際上它獲取唯一的非空值)。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ), GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
//Find how many in a group. We know it is 2 for Big Class
summarize(_by = By(:sex));
//Find out how many columns before adding residuals
ncpre = ncol(dt);
_nby = nitems(_by);
for(i=1, i<=_nby, i++,
obj << (Curve[i] << Save Residuals);
wait(0);
);
idx = ncpre+1::(ncpre+_nby);
//create a single column of residuals
resids = dt << New Column("Weight v Height Spline Residuals",
Numeric, Continuous,
<< Set Each Value( max(dt[row(),idx]) )
);
回覆:儲存樣條擬合殘差的腳本指定的每個單獨的“擬合”都必須單獨保存其殘差。「Curve[]」引用上的 substript 就是處理這個問題的。下面的範例有一個 GroupBy(:Sex),它將產生適合女性的「F」和適合男性的「M」。因此,必須發出2次「Save Residuals」。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ),
GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
obj << (Curve[1] << Save Residuals);
obj << (Curve[2] << Save Residuals);
當我為你的範例測試這段程式碼。我發現 JMP 14 不適用於保存樣條曲線擬合的殘差。我會將其作為錯誤傳遞給 JMP 支援。
回覆:儲存樣條擬合殘差的腳本謝謝吉姆! 有用。 如果我需要在雙變量中添加“GroupBy”是否可以保存所有殘差? 看起來 JMP 只保留了最後一條擬合線。 謝謝!
<SPAN class="token function">Names Default To Here</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token number">1</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
dt <SPAN class="token operator">=</SPAN> <SPAN class="token function">Open</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"$SAMPLE_DATA/Big Class.jmp"</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
obj <SPAN class="token operator">=</SPAN> Bivariate<SPAN class="token punctuation">(</SPAN>
Y<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Weight <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
X<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Height <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,<BR /></SPAN> GroupBy( :Team),
Fit Spline<SPAN class="token punctuation">(</SPAN> 0.1, Standardized <SPAN class="token punctuation">)</SPAN>
<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
obj <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN> <SPAN class="token punctuation">(</SPAN>Curve<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Save Residuals</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
回覆:儲存樣條擬合殘差的腳本您可以在腳本索引中找到這些類型的語法
幫助==>腳本索引==>雙變數==>雙變數曲線
這是該條目的腳本索引範例
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ),
Fit Polynomial( 3 )
);
obj << (Curve[1] << Save Residuals);