스크립팅 자동화: 예측 변수 검색 및 시그마 수준 설정안녕하세요,
모델링 흐름을 스크립팅하는 프로젝트를 맡았습니다. 모든 예측 변수와 반응 변수는 수치형 연속형이고, 반응 변수는 각각 개별적으로 적합되었습니다. 초기 데이터 준비 후...
- 단계적 K-폴드 검증 <-- 자동화
- 1단계 모델은 SLS에서 실행됩니다 <-- 자동화됨
- SLS 예측 프로파일러:
- 시뮬레이터 초기화 <-- 자동화
- 모든 요소 유형을 무작위로 변경 <-- 자동화되지 않음
- 각 열의 모든 SD를 3 시그마 값으로 변경 <-- 자동화되지 않음
이 흐름은 for 루프를 사용합니다. 각 반복마다 단일 반응 변수에 대한 일련의 분석을 수행합니다. 3.2 버전용 스크립트는 쉽게 구할 수 있지만, 표준편차(SD) 값을 3시그마 값으로 변경하는 것은 쉽지 않습니다. for 루프를 사용하면서 3.2 버전에서 표준편차 값을 수정하는 자동화는 어떻게 작동해야 할까요? 더 나은 방법이 있을까요? 환경설정 > 플랫폼 > 적합 모델 > 화재 최소제곱법을 살펴봤지만 표준편차 값을 1 SD에서 3 SD로 변경하는 옵션이 보이지 않습니다.
JMP 17로 새로 업데이트했는데, 도움이 된다면 좋겠습니다.
데이터 탐색 및 시각화Re: 스크립팅 자동화: 예측 변수 검색 및 시그마 수준 설정이 같은?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Tiretread.jmp");
obj = Profiler(
Y(
:Pred Formula ABRASION, :Pred Formula MODULUS, :Pred Formula ELONG,
:Pred Formula HARDNESS
)
);
val = 3;
obj << Simulator(
1,
Factors(
SILICA << Random(Normal(1.25, 0.3266)), SILANE << Random(Normal weighted(50, 6.532)),
SULFUR << Fixed(2.25)
),
Responses(
Pred Formula ABRASION << Add Random Noise(1), Pred Formula MODULUS << Add Random Noise(2),
Pred Formula ELONG << Add Random Noise(val), Pred Formula HARDNESS << Add Random Noise(val*2)
)
);
Scripting Index의 예에서 수정됨

Re: 스크립팅 자동화: 예측 변수 검색 및 시그마 수준 설정안녕하세요 @jthi ,
좀 빠지는. 아래는 제가 가지고 있는 코드 스니펫입니다. 조금 더 자세히 설명하겠습니다.
// Iterating through responses - JMP 17
mymodel_sw = Fit Model( Y( response[i] ),
Effects( Factorial to degree( eval( predict ) ), Response Surface( eval( predict ) ) ),
Personality("Stepwise"),
Run( "K-Fold Crossvalidation"n(5) )
);
// Runs modeling
mymodel_sw << Go;
// Finishes predictor selection before proceeding
mymodel_sw << Finish;
// Makes model
mymodel_sls = mymodel_sw << Make Model;
// Runs SLS model
mymodel_sls << Run;
// Finishes modeling before proceeding
mymodel_sls << Finish;
// Gets list of predictors
param_SLS = mymodel_sls << Get Parameter Names;<< 매개변수 이름 가져오기, 삭제된 개체 참조와 함께 param_SLS 오류가 발생합니다.그러나 << Simulate to table에서 인수를 구축하려면 이 매개 변수 목록이 필요합니다. 이를 처리하는 사용자 지정 함수를 만들어 수행하겠습니다.
이 코드 스니펫은 응답 목록을 한 번에 하나씩 반복하는 for 루프 내에 있습니다.이게 말이 돼?
Re: 스크립팅 자동화: 예측 변수 검색 및 시그마 수준 설정아니면 프로파일러 도구에서 매개변수 이름을 검색할 수 있는 방법이 있습니까? 상호 작용 용어를 모두 가져오지 못하고 모든 항목을 정렬해야 합니까? 작업할 수 있는 고유한 매개변수 이름 목록이 필요합니다. 적합할 매개변수의 수는 모델마다 다를 것이라고 가정해야 합니다.
Re: 스크립팅 자동화: 예측 변수 검색 및 시그마 수준 설정다음은 훨씬 더 심층적인 샘플 스크립트입니다.이것은 작동하지 않습니다!
Names default to here(1);
dt = open( "$SAMPLE_DATA/Body Fat.jmp" );
/////////////////////////// Custom function - Help!
mysim = function( {list, iteration, stddev, step},
// New list placeholder
unique_factors = {};
// Adds only unique factors to new list, uses "*" as identifier
for( i = 1, i <= N items( list ), i++,
if( list[i] << !contains( "*" ) , insert into( unique_factors, list[i] )
)
);
num_sim_factors = N Items( unique_factors );
// Modifies each factor in the simulator to normal distribution with 3 standard deviations
simfactor = {};
for( i = 1, i <= num_sim_factors, i++,
temp_1 = char( unique_factors[i] ) || " << Random( Normal( " || char( col mean( unique_factors[i] ) ) ||
", " || char( stddev * col std dev( unique_factors[i] ) ) || ") ),"
insert into( sim_factor, temp_1 )
);
// Inputs simfactor into simulator
mymodel_sls << Simulator( 1, eval( simfactor ) );
// Creates the arguments for Simulate to table
simtable_pt1 = "N Runs( " || char( iteration ) || "),"
simtable_pt2 = {};
// Creates an argument for each factor
for( i = 1, i <= num_sim_factors, i++,
temp_2 = char( unique_factor[i] ) || " << Sequence Location( " || char ( Col Minimum( unique_factor[i] ) ) || ", "
chart ( Col Maximum( unique_factor[i] ) ) || ", " || char( step ) || " ),";
insert into( simtable_pt2, temp_2 )
);
// Combines strings into a single argument for use for Simulate to Table
simarg = simtable_pt1 || simtable_pt2;
// Simuates data to table for further analysis
mymodel_sls << Get simulator;
mymodel_sls << Simulate to table( simarg );
);
/////////////////////////// Cols to use - user adjustable
predict = {:"Neck circumference (cm)"n, :"Chest circumference (cm)"n,
:"Abdomen circumference (cm)"n, :"Hip circumference (cm)"n,
:"Thigh circumference (cm)"n, :"Knee circumference (cm)"n,
:"Ankle circumference (cm)"n, :"Biceps (extended) circumference (cm)"n,
:"Forearm circumference (cm)"n, :"Wrist circumference (cm)"n};
response = {:"Age (years)"n, :"Weight (lbs)"n, :"Height (inches)"n};
/////////////////////////// User input
num_response = N Items( response );
num_predict = N Items( predict );
// How many simulations to run?
sim_no = 1000;
// How many standard deviations for each predictor in the simulation?
stddev = 3;
// Steps in simulation
steps = 4;
/////////////////////////// Changing col attribute
// In a later step, Simulate, the mean should be 0 due to this
for( i = 1, i <= num_response, i++,
response[i] << Set Property( "Coding", { col minimum( response[i] ), col maximum( response[i] ) } );
);
/////////////////////////// Modeling
/* Fit Model - Stepwise, w/ K-fold validation --> SLS --> Simulate */
for( i = 1, i <= num_response, i++,
// Names models for calling later
mymodel_sw = "FM_SW_" || char( i );
// Iterating through responses - JMP 17
mymodel_sw = Fit Model( Y( response[i] ),
Effects( Factorial to degree( eval( predict ) ), Response Surface( eval( predict ) ) ),
Personality("Stepwise"),
Run( "K-Fold Crossvalidation"n(5) )
);
// Runs modeling
mymodel_sw << Go;
// Finishes predictor selection before proceeding
mymodel_sw << Finish;
// Makes model
mymodel_sls = mymodel_sw << Make Model;
// Runs SLS model
mymodel_sls << Run;
// Finishes modeling before proceeding
mymodel_sls << Finish;
////////////////// NOT WORKING BELOW
// Gets list of predictors <--- This is first step
param_sls1 = mymodel_sls << Get Effect Names;
param_sls2 = mymodel_sls << Get Parameter Names;
show(param_sls1, param_sls2);
// Calls on custom function <--- This is second step
mysim( param_sls1, sim_no, stddev, steps );
// Names Simulate to table dataset by response variable in for loop
Current data table() << Set name( char( response[i] ) || "_report" );
);돕다! 이것의 여러 부분이 작동하지 않습니다!작동 중인 기능은 다음과 같습니다. 사용자 지정 기능과 아래(스크립트 하단 근처) 아래에 작동하지 않는 상태가 있는 항목을 주석 처리합니다. SLS 모델링을 생성할 수는 있지만 시뮬레이션 매개변수를 수정하고 시뮬레이션을 실행하면 둘 다 사용자 정의됩니다(사용자 정의 기능 참조). 아이디어가 없습니다.
Re: 스크립팅 자동화: 예측 변수 검색 및 시그마 수준 설정해당 기능에는 문제를 일으킬 수 있는 오타가 많이 있습니다. 방금 몇 가지를 수정했는데, 해야 할 일을 하는지 모르겠습니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Body Fat.jmp");
mysim = function({input_list, iteration, stddev, step},
unique_factors = Filter Each({item}, input_list, !Contains(item, "*"));
num_sim_factors = N Items(unique_factors);
simfactor = {};
simfactor = Transform Each({uniq_factor}, unique_factors,
Eval Insert("^uniq_factor^ << Random(Normal(^col mean(column(dt, uniq_factor))^, ^stddev * col std dev(column(dt, uniq_factor))^");
);
// Inputs simfactor into simulator
mymodel_sls << Simulator( 1, eval(simfactor));
// Creates the arguments for Simulate to table
simtable_pt1 = "N Runs( " || char(iteration) || "),";
simtable_pt2 = {};
// Creates an argument for each factor
simtable_pt2 = Transform Each({uniq_factor}, unique_factors,
Eval Insert("^uniq_factor^ << Sequence Location(^Col Minimum(column(dt, uniq_factor))^, ^Col Maximum(column(dt, uniq_factor))^, ^step^)");
);
// Combines strings into a single argument for use for Simulate to Table
simarg = simtable_pt1 || Concat Items(simtable_pt2, ",");
// Simuates data to table for further analysis
mymodel_sls << Get simulator;
mymodel_sls << Simulate to table(simarg);
);
predict = {:"Neck circumference (cm)"n, :"Chest circumference (cm)"n,
:"Abdomen circumference (cm)"n, :"Hip circumference (cm)"n,
:"Thigh circumference (cm)"n, :"Knee circumference (cm)"n,
:"Ankle circumference (cm)"n, :"Biceps (extended) circumference (cm)"n,
:"Forearm circumference (cm)"n, :"Wrist circumference (cm)"n};
response = {:"Age (years)"n, :"Weight (lbs)"n, :"Height (inches)"n};
num_response = N Items(response);
num_predict = N Items(predict);
sim_no = 1000;
stddev = 3;
steps = 4;
For(i = 1, i <= num_response, i++,
response[i] << Set Property("Coding", {Col Minimum(response[i]), Col Maximum(response[i])})
);
For(i = 1, i <= num_response, i++,
mymodel_sw = "FM_SW_" || Char(i);
mymodel_sw = Fit Model(
Y(response[i]),
Effects(Factorial to degree(Eval(predict)), Response Surface(Eval(predict))),
Personality("Stepwise"),
Run("K-Fold Crossvalidation"n(5))
);
mymodel_sw << Go;
mymodel_sw << Finish;
mymodel_sls = mymodel_sw << Make Model;
mymodel_sls = mymodel_sls << Run;
mymodel_sls << Finish;
param_sls1 = mymodel_sls << Get Effect Names;
param_sls2 = mymodel_sls << Get Parameter Names;
Show(param_sls1, param_sls2);
mysim(param_sls1, sim_no, stddev, steps);
dt << Set name(Char(response[i]) || "_report");
);Re: 스크립팅 자동화: 예측 변수 검색 및 시그마 수준 설정@jthi - 나는 당신의 추천을 조금 파고들어야 할 것입니다.Filter Each, Transform Each 및 Eval Insert를 본 적이 있지만 경험이 없고 어떻게 작동하는지 아직 모릅니다.
또 다른 질문입니다.Eval Insert에는 전에 본 적이 없는 당근 ^ 표시가 있습니다.해당 기능에 대해 자세히 알아볼 수 있는 설명서가 있습니까?나는 당신이 그것을 사용하는 방법에서 꽤 분명하다고 생각하지만, 나는 흥미가 있고 당신의 사용법을 올바르게 해석하고 있는지 확인하고 싶습니다.
simfactor = Transform Each({uniq_factor}, unique_factors,
Eval Insert("^uniq_factor^ << Random(Normal(^col mean(column(dt, uniq_factor))^, ^stddev * col std dev(column(dt, uniq_factor))^");
);Re: 스크립팅 자동화: 예측 변수 검색 및 시그마 수준 설정@jthi ,
당신은 올바른 길을 가고 있었습니다! 각각의 함수에 삽입할 인수를 생성하려면 다른 표현식 조작이 필요했습니다.mysim 사용자 정의 함수에서 시뮬레이션을 위한 분포 수정에 삽입되는 인수와 Simulate to Table에 삽입할 인수 생성에 대해 자세히 설명했습니다.이것은 매우 흥미로운 학습 기회이며 이러한 유형의 고급 표현에 눈을 뜨게 했습니다.
식 조작에 대해 자세히 알고 싶은 사람은 다음 문서 링크를 참조하세요. https://www.jmp.com/support/help/en/17.0/#page/jmp/advanced-expressions-macros-and-lists.shtml#
도와주신 분들께 감사드립니다!
Names default to here(1);
dt = open( "$SAMPLE_DATA/Body Fat.jmp" );
mysim = function( {list, iteration, stddev, step},
// filter list of effects down to main effects. These are the effects whose name matches a column name
// take advantage of the speed of associative arrays to get the intersection set.
list << Intersect(Associative Array(dt<<GET column="" names=""> SLS --> Simulate */
for( k = 1, k <= num_response, k++,
// Names models for calling later
mymodel_sw = "FM_SW_" || char( k );
// Iterating through responses - JMP 17
mymodel_sw = Fit Model( Y( response[k] ),
Effects( Factorial to degree( eval( predict ) ), Response Surface( eval( predict ) ) ),
Personality("Stepwise"),
Run( "K-Fold Crossvalidation"n(5) )
);
// Runs modeling
mymodel_sw << Go;
// Finishes predictor selection before proceeding
mymodel_sw << Finish;
// Makes model
mymodel_sls = mymodel_sw << Make Model;
// Runs SLS model
mymodel_sls = mymodel_sls << Run; // this creates another object. assign your variable to that object
mymodel_sls << Profiler(1); // make sure profiler is on.
// Gets associative array of effect names.
// use this in the function to easily filter down to the main effect names
param_sls1 = Associative Array(mymodel_sls << Get Effect Names);
// Calls on custom function <--- This is second step
resultDT = mysim( param_sls1, sim_no, stddev, steps ); // assign variable to reference returned table
// Names Simulate to table dataset by response variable in for loop
resultDT << Set name( char( response[k] ) || "_report" );
);</GET>
봄 여름 시즌