創建 Rsquared 值表的快速方法我有一個腳本可以找到一個參數與多個參數的 Rsquared 值。一旦進入表格,就可以很容易地對最佳值進行排序。多年來它一直運行良好,但是當我嘗試推動它找到數万個或更多參數的值時,它需要很長時間。我想知道是否有人知道 JSL 中執行此操作的快速方法。
我嘗試過但都花費太長時間的事情:
1. 製作雙變量報告並從顯示樹中讀取 Rsq。
xyp =雙變量(Y(柱子(分別)), X(評估(fact)), Fit Polynomial(degree), 不可見);
該命令實際上運行速度比我預期的要快,但大部分時間都是通過顯示樹循環獲取值。
2. 使用 Fit Model -> StepWise -> 1 項的所有可能模型。
這似乎只適合所有項都沒有缺失數據的數據行,而且我可能有一些項有很多缺失數據。所以不符合我的需求。
3. 使用如下函數對正方形求和。
GetRsquared = function ({x,y}, {sx,sy,ssxx,ssyy,ssxy,nr,np,i},
sx=0;
sy=0;
ssxx=0;
ssyy=0;
ssxy=0;
nr=nrows(y);
np=nr;
for( i=1, i<=nr, i++,
if(is missing(x[i]),np--,
if(is missing(y[i]),np--,
sx=sx+x[i];
sy=sy+y[i];
ssxx=ssxx+x[i]*x[i];
ssyy=ssyy+y[i]*y[i];
ssxy=ssxy+x[i]*y[i]
)));
ssxx=ssxx-sx*sx/np;
ssyy=ssyy-sy*sy/np;
ssxy=ssxy-sx*sy/np;
r2=ssxy*ssxy/ssxx/ssyy
);
回复:創建 Rsquared 值表的快速方法感謝大家的幫助。在此總結一下,為以後的JMP探索者做一個記錄。
我試圖找到一種方法來快速確定一個項與多個項(最多約 100,000 個項)的所有 R 平方值。
在我的試用中,我使用裝有 Windows 7、64 位操作系統、Intel Core i5-4300U CPU @190 GHz 2.50 Ghz、16 GB RAM 的 HP EliteBook 擬合了 2,000 個術語。
我的原始方法是 1) 循環雙變量擬合併從顯示樹中讀取 R 平方,或 2) 強制計算,這兩種方法在我的筆記本電腦上都花費了大約 37 秒。100,000 個術語大約需要 30 分鐘!並且想要對多個響應項執行此操作!
使用 Multivariate 平台的方法消耗了我所有的計算機資源約 15 分鐘,然後由於內存不足而崩潰。不要在家裡嘗試這個。
使用 KarenC 的 Response Screening 的方法只用了 1 秒!這顯然是解決方案。我將 mikedriscoll 的回复標記為解決方案,只是因為他總結了討論並展示了要使用的代碼。
為了完整起見,這是我最後使用的代碼。
dt 是我原來的數據表。
resp 是命名感興趣的 y 列的字符串。
fact 是命名感興趣的 x 列的字符串列表。
dt1 = dt << Response Screening(Y(column(resp)), X(eval(fact)));
// Note: This is not a normal table and JMP will not recognize dt1 as a table
// The 'table' is called "Pvalues". Hopefully you don't already have a table of that name.
// Of course you can write more code to make this error proof.
// To immediately move this information to a normal JMP table I took a subset.
dt2 = Data Table( "PValues" ) << Subset( All rows, Selected columns only( 0 ) );
// Now I can do other things, like ...
dt2 << Sort( By( :RSquare ), Order( Descending ), Replace Table );
rsq = dt2:RSquare<< get as matrix;
回复:創建 Rsquared 值表的快速方法您可以從 JSL 調用響應篩選平台...從那裡我的 JSL 技能幫不了您。
回复:創建 Rsquared 值表的快速方法為了回答您關於我的腳本的第一個問題,多變量只有“Y”變量,所以我連接 X 和 Y 並讓它計算它。 我不記得我為重疊做了什麼,但我想我以某種方式處理它。
Karen 指出的響應篩選對我嘗試做的事情更有意義。顯然可以編寫腳本。 將其作為測試運行,然後查看報告輸出中的紅色三角形,而不是表格。 頂部的紅色三角形。 點擊save script -> to script window就可以看到了。 我不知道如何獲取表的引用和 r 值,但我可能會在執行腳本之前獲得打開表的列表……然後在生成新表後找到它。
響應篩選( Y( .... ), X(.... ) )
回复:創建 Rsquared 值表的快速方法我也很驚訝新數據表上沒有“來源”條目。我建議您在 JMP 願望清單中添加一個條目,要求添加此條目。
回复:創建 Rsquared 值表的快速方法凱倫,
這非常快,似乎獲得了我想要的所有參數。
我的應用程序是對結果執行其他操作的腳本的一部分。
你認為它可以編寫腳本嗎?
我很驚訝該表沒有 Source 變量。
回复:創建 Rsquared 值表的快速方法麥克風,
感謝您的回复。我試過了。這是否僅記錄了所有數據中通用項的 R?我想知道它是否對不良數據列具有魯棒性。
拍
回复:創建 Rsquared 值表的快速方法最近我一直在使用 Analyze>Screening>Resposne Screening(不是 JSL,只是 UI)來獲取 RSq 值。這適用於一個與多個參數或多個與多個參數。 它很快。 您最終會得到其他信息,但是,RSq 值位於生成的 pvalue 表中。 額外提示:在 P 值表中,您可以選擇行(參數對)並運行“擬合選定項”表 scritp 以獲得雙變量擬合。 我喜歡這個,因為在我真正相信它之前,我總是希望看到一種在數字上看起來很強大的關係。
回复:創建 Rsquared 值表的快速方法我有一個腳本幾乎可以做同樣的事情。 過去使用雙變量,現在我使用多變量(參見下面腳本的子集)。我最近發現了一個我還沒有修復的錯誤,列名中可能有特殊字符。 但總的來說,這應該有效。 我不記得我是否在如此大的數據集上使用過它,但對於我處理的數據,它要快得多。請注意,要獲得 x 的通用 # 與 y 的通用 #,它實際上是針對 (num_x + num_y) 與 (num_x + num_y) 進行計算,這仍然比遍歷雙變量更快。
編輯:Karen 的方法看起來比這個更有效/更優雅。 如果我需要更新我的腳本,我肯定會檢查該方法。
numX = nitems(xParamNames);
numy = nitems(yParamNames);
yxParamNames = concat(yParamNames, xParamNames);
mvObj = Multivariate(
// Y(evallist(yParamList)
Y(evallist(yxParamNames)
),
Estimation Method( "Row-wise" ),
Matrix Format( "Square" ),
Scatterplot Matrix(0
)
);
corrMatrixObj = mvObj << xpath( "//OutlineBox[ text() = 'Correlations']//MatrixBox");
corrMatrix = corrMatrixObj << get();
corrMatrix = corrMatrix[1];
corrMatRows = 1::numY;
corrMatCols = (numY+1)::(numY+numX);
sub_corrMatrix = corrMatrix[corrMatRows,corrMatCols];
myRsqr = aslist(power(sub_corrMatrix,2)); // rsqr is corr matrix to the power 2. rest of script expects a list.
mvObj<< closewindow();