需要一些腳本幫助 - 斜率最大的線性擬合<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我正在研究 96 孔板的液體生長培養基中細菌的生長。 我想要得到最大增長率,即指數增長階段直線的斜率,如下:

我需要做的是從兩個方向切割數據,使直線適合斜率最大的 10 個數據點。

我的每個數據表都有 96 條這樣的曲線,並用字母數字名稱(“Well”)表示。

y 軸數據是自然對數轉換的“(Ln OD 600”),x 軸數據以小時為單位 (“Time [hrs]”)。 目前,我編寫了一個腳本,該腳本使用 Fit Y by X 平台,在 Y 響應中輸入“Ln OD 600”,在 X 因子中輸入“Time [hrs]”,在 By-box 中輸入“Well”。 因此,我得到了一份包含 96 個不同圖表的報告,每個圖表都適合一條線,並使用“時間 [小時]”打開本地數據過濾器,並將其剪切為 10 個數據點/匹配行。

然後我必須手動滑動該過濾器/滑塊以找到該線的最大斜率。 我有幾百個數據文件,所以需要大量時間才能完成!

我想做的是編寫一個腳本,該腳本會自動移動滑塊並找到直線的最大斜率。 不幸的是,腳本和編碼不是我的技能之一,所以我很困惑。 我現在已經附上了我的 JSL 腳本。 感謝您的任何幫助或想法!
回复:需要一些腳本幫助 - 斜率最大的線性擬合
嗨吉姆 -
您將如何修改腳本以找到上圖中示例的數據在整個範圍內的最大斜率?我嘗試修改您的腳本,但它沒有正確排除任何行。 它的格式與 OP 相同。每個“孔”都有相似的波形。
謝謝,
德魯
回复:需要一些腳本幫助 - 斜率最大的線性擬合吉姆,
這太棒了! 我已經在 1 組完整的數據上運行了它,腳本計算出的線斜率與手動計算的斜率相關,R 平方為 0.98。 我懷疑一點點的變化是由於手工計算時出現的錯誤造成的。 我會用它做更多的事情,但這看起來正是我需要的!一旦我在一些已經分析過的數據文件上運行它的性能,我將再次發布。
非常感謝您的幫助,
內森
回复:需要一些腳本幫助 - 斜率最大的線性擬合在您的數據上嘗試此腳本,看看它是否更接近您想要的:
名稱默認為此處( 1 ) ;
//打開數據表
dt =當前數據表() ;
總結( dt ,井清單=經過( :出色地) ) ;
dt <<按列顏色( :出色地) ;
// 遍歷每個Well的數據,找到最好的10個連續點
// 最好的坡度
為了(我= 1 ,我<= N 項(井清單) ,我++,
// 設置列表以包含已確定的 10 個具有最高斜率的數據點
dt <<選擇地點( :出色地==井清單[我] ) ;
貝斯特貝塔= 0 ;
斯塔羅= 0 ;
你們= :長鏈OD 600 [ dt <<獲取選定的行] ;
哈爾= :時間[ dt <<獲取選定的行] ;
為了( k = 1 , k <= N 行(哈爾) - 10 , k ++,
X =哈爾[ k :: k + 9 ] ;
X = J ( N 行( X ) , 1 , 1 ) || X ;
y =你們[ k :: k + 9 ] ;
// 回歸計算
xpxi =逆( X ` * X ) ;
貝塔= xpxi * X ` * y ;
如果(腹肌(貝塔[ 2 ] ) >貝斯特貝塔,
貝斯特貝塔=腹肌(貝塔[ 2 ] ) ;
斯塔羅= ( dt <<獲取選定的行)[ k ] ;
) ;
) ;
為了( k =最小( dt <<獲取選定的行) , k <=最大限度( dt <<獲取選定的行) , k ++,
如果(斯塔羅<= k <=斯塔羅+ 9 ,
行狀態( k ) =排除狀態( 0 ) ,行狀態( k ) =排除狀態( 1 )
) ;
) ;
) ;
// 創建圖形輸出
雙變量(是( :長鏈OD 600 ) , X ( :時間) ,通過...分組( :出色地) ,擬合線( 1 ) ) ;
回复:需要一些腳本幫助 - 斜率最大的線性擬合吉姆,
太棒了,謝謝! 我可能沒有說清楚。 這是我第一次嘗試編寫腳本。 我很感謝您的幫助,
內森
回复:需要一些腳本幫助 - 斜率最大的線性擬合我錯誤地認為每個不同的井值都在不同的列中。修改腳本來滿足您的需求不會是一個重大項目。我要到明天下午才能拿到,但到時候我會把它交給你。
回复:需要一些腳本幫助 - 斜率最大的線性擬合吉姆,
謝謝您的回復和想法! 我能夠更改腳本以應用於我的表並運行它。 然而,當每條曲線以時間作為 x 軸繪製時,我實際上需要這條線適合每條曲線。 然後我需要選擇產生最大斜率的 10 個連續點(根據時間連續)。 如果我不清楚這一點,我很抱歉。 基本上,如果每個點之間有 10 分鐘,我就會尋找直線斜率最大的 100 分鐘時間段。
這是我的數據表的快照。 基本上,“Well”列中有 96 個字母數字組合標識符。 每個標識符有 140 行左右。 然後,我在 x 軸上繪製“時間 [小時]”,在 y 軸上繪製“OD 600”,在“依據”框中繪製“Well”。 這有幫助嗎?

這是對話框:

非常感謝你的幫助!
〜內森
回复:需要一些腳本幫助 - 斜率最大的線性擬合這是一個我相信可以實現您想要的功能的腳本。它是使用名為 Big Class 的 JMP 示例數據表進行設置的示例。但是,如果您只是將腳本指向要運行的數據表,並更改 Y Var = "age";到你想要對抗的Y列,你應該得到你想要的。該腳本有 2 個假設......第一個是要分析數據表中的所有數字連續列,第二個假設是列中的數據按 X 變量排序。如果不是這種情況,可以修改腳本來處理這種情況。它只會增加更多的處理時間我更改了腳本來進行排序。
名稱默認為此處( 1 ) ;
//打開數據表
dt =打開( “$SAMPLE_DATA/Big Class.jmp” ) ;
Y變量= “年齡” ;
// 將數據存入矩陣
列列表= dt <<獲取列名(連續的,細繩) ;
// 從列表中刪除 Y 變量
列列表=消除(列列表,包含(列列表, Y變量) , 1 ) ;
// 設置列表以包含已確定的 10 個具有最高斜率的數據點
最佳數據= {} ;
最佳伊蘇= {} ;
列名稱= {} ;
貝斯特貝塔= 0 ;
斯塔羅= 0 ;
// 遍歷列
為了(我= 1 ,我<= N 項(列列表) ,我++,
// 對數據進行排序以確保數據按升序排列 X
dt <<種類(經過(科利斯特[我] ) ,命令(上升) ,更換錶( 1 ) ) ;
你們=柱子( Y變量) <<獲取值;
哈爾= (柱子( dt ,碰撞[我] ) <<獲取值) ;
為了( k = 1 , k <= N 行(哈爾) - 10 , k ++,
X =哈爾[ k :: k + 9 ] ;
X = J ( N 行( X ) , 1 , 1 ) || X ;
y =你們[ k :: k + 9 ] ;
// 回歸計算
xpxi =逆( X ` * X ) ;
貝塔= xpxi * X ` * y ;
如果(腹肌(貝塔[ 2 ] ) >貝斯特貝塔,
貝斯特貝塔=腹肌(貝塔[ 2 ] ) ;
斯塔羅= k ;
) ;
) ;
最佳數據=最佳數據||作為列表(哈爾[斯塔羅::斯塔羅+ 9 ] ) ;
最佳伊蘇=最佳伊蘇||作為列表(你們[斯塔羅::斯塔羅+ 9 ] ) ;
為了( k = 1 , k <= 10 , k ++,
插入(列名稱,列列表[我] )
) ;
) ;
// 創建新的數據表,其中所有列的最好 10 分
一起=新表( “結果” ,
新專欄( “欄目名稱” ,特點,價值觀(列名稱) ) ,
新專欄( “是” ,價值觀(最佳伊蘇) ) ,
新專欄( “數據” ,價值觀(最佳數據) )
) ;
// 創建圖形輸出
一起<<按列顏色( :列名) ;
雙變量(是( :是) , X ( :數據) ,通過...分組( :列名) ,擬合線( 1 ) ) ;