需要一些脚本帮助 - 斜率最大的线性拟合<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 ) ) ;