如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?大家好,
我想製作一個用於可靠性估計的腳本。 我的任務之一是評估估計的分位數/概率。
在這些表達式中(請參閱下面的代碼),如果我使用列表顯式列出所有類別,例如 {0, 1, 2, 3},則表達式可以正常工作。 但是,如果我將變量用於列表,然後使用該變量而不是在代碼中顯式編寫列表,則表達式不起作用。
這是一個例子。
下面的代碼工作正常:
Lognormal Estimate Probability( Profile, {1000}, {0 ,1, 2, 3} )
以下代碼不起作用:
list_Category_num = {0 ,1, 2, 3}
Lognormal Estimate Probability( Profile, {1000}, list_Category_num )
我嘗試搜索這個論壇,到目前為止,嘗試使用“eval()”、“eval list()”、“eval expr()”等命令,但問題仍然存在。
下面是完整的代碼:
Fit Life by X(
// Set distribution and parameters
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
// Fit Lognormal and set confidence interval
<<FIT lognormal=""></FIT>
非常感謝您的幫助。
高級統計建模自動化和腳本編寫數據探索和可視化實驗設計可靠性分析視窗回复:如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?感謝您向技術支持報告該問題, @Bhume_Chant
我錯過了“個人資料”。 你的觀察是正確的。 在 JMP 16 中,需要“輪廓”。 即選擇“Likelihood CI”類型。 請在您的腳本中添加“個人資料”。

從 JMP 17 開始,不再需要“輪廓”。 Wald 和 Lifelihood CI 均已報告。
回复:如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?非常感謝彭老師!
首先,我剛剛按照您的建議向 JMP 支持團隊發送了一封電子郵件。 該案件的案件編號為:TS-00030985。
其次,非常感謝您還詳細解釋了包裝平台對象和包裝消息。 當我以後需要編寫JSL時,我會記住這個重要的實踐。
順便說一句,關於您顯示的代碼,它們都有效,但我必須在 {1000} 前面添加“個人資料”一詞,如下所示:
此代碼適用於我正在使用的 JMP 版本:
Lognormal Estimate Probability(profile, {1000}, vvv )
此代碼不會生成錯誤,但我使用的 JMP 版本沒有任何反應:
Lognormal Estimate Probability({1000}, vvv )
我不確定我需要添加“配置文件”的原因是否與我正在使用的 JMP 版本相關。 我目前使用的是舊版本的 JMP(版本 16.2)。
回复:如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?感謝您讓我注意到這一點, @馬克貝利!
@Bhume_Chant首先請聯繫support@jmp.com報告此問題。 當前程序需要一個數字列表,可以是文字數字列表或變量列表,但不需要變量,它是一個列表。 這應該得到解決。 請聯繫技術支持。 我們很感激。
為了解決您當前的問題,這裡有一個解決方法,與馬克的建議一致。 但我提供了更多的見解,因此類似的技術可能在其他不需要“評估”行為的地方有用。 這是兩個有效的代碼片段。
這是第一個
vvv = {0,1,2,3};
obj = Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
);
eval(
substitute(
expr(
obj << set scriptables(
{
Lognormal Estimate Probability( {1000}, vvv )
}
)
),
expr(vvv), vvv
)
);
這是第二個,
vvv = {0,1,2,3};
eval(
substitute(
expr(
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
Lognormal Estimate Probability( {1000}, vvv )
}
)
)
),
expr(vvv),vvv
)
);
將它們與您的腳本進行比較,區別在於包裝的表達式。 上面的兩個片段包裹在平台對象的外部。 您的腳本包裝了一個表達式,該表達式是一條消息。
現在我解釋為什麼環繞消息不起作用。 當消息被包裝在 eval-substitute 技巧的一側時,仍然需要平台實現來識別這個 eval-substitute 的含義。 在這種情況下,平台不希望它是一個表達式。 我懷疑大多數平台都是如此。
因此,根據我從這個案例中學到的知識,我的建議是使用平台對象級別之上的 eval-substitute 技巧。
回复:如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?現在可以了!
太感謝了!
回复:如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?這是腳本索引中示例的另一種方法:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Reliability/Devalt.jmp" );
obj = dt << Fit Life by X(
Y( :Hours ),
X( :Temp ),
Distribution( Lognormal ),
Censor( :Censor ),
Relationship( Arrhenius Celsius ),
Freq( :Weight )
);
p = obj << Probability( Lognormal, 30000, 10 );
Show( p );
回复:如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?您必須在啟動平台後發送消息。 像這樣的東西:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Reliability/Devalt.jmp" );
obj = dt << Fit Life by X(
Y( :Hours ),
X( :Temp ),
Distribution( Lognormal ),
Censor( :Censor ),
Relationship( Arrhenius Celsius ),
Freq( :Weight )
);
val = {0,1,2,3};
Eval(
Substitute(
Expr(
obj << Set Scriptables( {Lognormal Estimate Probability( Profile, {1000}, vvv ) } );
),
Expr( vvv ), val
)
);回复:如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?你好,馬克,非常感謝你的幫助,但是你能幫我解決這個問題嗎?
我嘗試嵌入上面的腳本,沒有錯誤,但也沒有顯示結果。 我不知道我哪裡做錯了。
這是按預期工作的腳本:
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
Lognormal Estimate Probability( Profile, {1000}, {0,1,2,3} )
}
)
);以下是預期結果:

現在,我嘗試用腳本替換“對數正態估計概率”部分,如下所示:
vvv = {0,1,2,3};
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
eval(
substitute(
expr(Lognormal Estimate Probability( Profile, {1000}, vvv )),
expr(vvv), vvv
)
)
}
)
);沒有錯誤,但也沒有任何反應:

順便說一下,我還附上了用於生成結果的虛擬數據。
非常感謝。
回复:如何使列表的變量適用於“Fit Life by X”中的分位數/概率估計?並非所有函數在調用時都會計算變量參數,因此您必須使用參數的文字值。 同時你可以使用表達式來解決這個問題。 人們有不同的風格。 這是一個例子來說明這一想法。
list_Category_num = {0 ,1, 2, 3};
Eval(
Substitute(
Expr( Lognormal Estimate Probability( Profile, {1000}, vvv ) ),
Expr( vvv ), list_Category_num
)
);