에서 이전 게시물 , 내가 언급했다. 새로운 JMP 애드 인 이전에 데이터를 분할하는 데 사용할 수있는 예측 모델링 . 이 게시물은 이것이 어떻게 작동 하는지를 다루고 있으며 JMP 스크립팅 언어 (JMP Scripting Language) 또는 간략하게 JSL이라는 주제를 다루고 있습니다.
이것은 큰 주제이므로 여기서는 약간 유용한 JSL 스크립트의 해부학을 보여 드리겠습니다. 이 게시물은 귀하가 다운로드하여 설치 한 것으로 가정합니다. 추가 기능 그것이하는 일에 익숙합니다. (참고 : 추가 기능을 다운로드하려면 무료 SAS 로그인이 필요합니다.)
JMP 9에서 '보기> 추가 기능 ...'메뉴 항목을 선택하면 '계층화 된 분할'이 콤보 상자에 나열됩니다. 이 항목을 선택하면 추가 기능의 '홈 폴더'에 대한 링크가 제공되며이 링크를 선택하고 'stratifiedSplit.jsl'을 두 번 클릭하면 JMP 편집기에서 소스 코드가 열립니다. 계속 진행하려면 편집기에서 줄 번호를 표시하도록 선택했는지 확인하십시오 ( '파일> 환경 설정', '기본 설정 그룹'으로 '스크립트 편집기'선택).
JSL은 다음과 같이 해체 될 수 있습니다.
(1) 11-13 행 : 데이터를 분할 할 기본 비율. 이름에 '0', '1'또는 '2'의 접미사는 'Training', 'Validation'또는 'Test'데이터와 관련이 있음을 나타냅니다 (JMP가 만드는 임의의 표시기 열에서 생성 된 값을 미러링 함) .
(2) 15-29 행 : 기본 비율 중 하나를 업데이트하면 새 값이 실제로 0과 1 사이에 있는지 확인하는 함수입니다.
(삼) 31 ~ 55 행 : 사용자 인터페이스 - 현재 데이터 테이블의 모든 열을 표시하고 응답 열을 선택할 수 있습니다. 기본 분할 비율을 재정의 할 수도 있습니다.

(4) 58-85 행 : (3)의 '도움말'버튼을 누르면 새 창에 도움말이 표시됩니다.
(5) 라인 88-104 : (3)의 'OK'버튼을 누를 때 실행되고 실제로 지정된 세 비율이 여전히 1로 합계되는지 확인합니다. 그렇지 않은 경우 (3)이 기본 분할 비율로 다시 표시됩니다.
(6) 라인 107-135 : 응답 열이 실제로 선택되었는지 확인하고 그렇지 않으면 중지합니다. 응답 열을 선택한 경우 해당 열의 고유 한 수준 수를 찾고이 값이 100보다 크면 중지 옵션을 제공합니다.
(7) 라인 138-182 : 현재 테이블의 어떤 행이 응답 열 (6)의 레벨과 지정된 분할 비율 (3)에 해당되는지에 대한 맵핑을 사용하여 새 유효성 검사 컬럼을 빌드합니다. 그런 다음 Distribution을 사용하여 테이블의 행을 임의로 분할하는 방법을 보여줍니다.
이미 JSL에 익숙한 사람들을 위해이 코드는 주목할 가치가 없습니다. 그러나 더 높은 수준에서 항상 디자인 의사 결정이 있어야하며, 최종 결과가 의도 된 용도에 "단지 충분 함"이어야한다는 것을 명심할 때 일반적으로 타협이 필요합니다.
이 경우, 예를 들어 오류 검사를 위의 (2)와 (5) 두 부분으로 분리하여 사용자 인터페이스 뒤에있는 논리를 단순화하기위한 특정 선택이 이루어졌습니다. 약간의 인내와 JSL 가이드 ( '도움말> 서> 스크립팅 안내서')의 도움을 받아 JSL을 처음 사용하는 경우라도 코드의 각 섹션이 실제로 어떻게 작동하는지에 대한 세부 사항을 파악할 수 있어야합니다. 결국, 새로운 언어를 배우기 시작하는 가장 좋은 방법 중 하나는 작동하는 것으로부터 시작하는 것입니다. 공간의 이유 때문에 (6)과 (7)을 살펴 보겠습니다.
앞서 언급했듯이이 문제의 핵심 부분 중 하나는 응답 열 (6)의 수준을 알아내는 것입니다. 이 작업을 수행하는 방법은 여러 가지가 있지만 연관 배열 가장 다재다능합니다.
아래에 표시된 코드 단편은 테이블을 함께 재생합니다. 5 행은 'Response'의 20 개 값을 벡터로 가져오고, 6 행은 연관 배열을 작성하고 'Get Keys'메시지를 보내어 사전 식 순서로 구별되는 값을 나타냅니다. 연관 배열의 한 가지 이점은 모든 데이터 유형 (이 경우처럼 숫자가 아님)에서 작동하지만 'Get Keys'는 항상 목록을 반환한다는 점입니다. 그래서 7 행에서 'N Items ()'를 사용하여이 목록에 포함 된 항목 수를 확인해야합니다.

(6)에서 'yLev'와 'nLevs'에 대한 값을 얻었 으면 (7)의 단계는 다음과 같습니다.
1. 누락 된 값의 벡터, 나중에 새 유효성 검사 열 (141 행)을 채우는 데 사용되는 'vVals'를 작성하십시오.
2. 'yLev'에있는 뚜렷한 레벨을 반복합니다 (143 ~ 161 행).
삼. 현재 레벨에 해당하는 'yVals'(따라서 데이터 테이블)에서 행 번호를 찾아 'stratum'변수에 저장합니다 (145 행). 여기서 수행 할 구문은 'yVals'가 벡터인지 또는 목록인지에 따라 달라 지므로 원래 응답 열의 데이터 유형이 '숫자'또는 '문자'인지 여부에 따라 달라집니다.
4. 변수 'stratumN'은 현재 레벨 (행 147)에 해당하는 행 수를 유지합니다. 지정된 분할 비율을 정수로 변환하고이 합계가 'stratumN'(149 ~ 154 행)인지 확인하십시오.
5. 올바른 길이와 '0', '1'및 '2'값을 각각 포함하는 벡터 'v0', 'v1'및 'v2'을 작성하십시오 (157 ~ 159 행). 후속 단계가 항상 작동하도록하려면 비율 중 하나가 0.0 일 가능성을 허용하고 해당 벡터를 '[]'로 설정해야합니다.
6. 이 벡터들을 (VConCat ()을 사용하여) 끝까지 쌓고 '0', '1', '2'값들이 무작위로 분포되도록 결과를 섞는다. 이 값을 'vVals'의 올바른 행에 할당하여 누락 된 값이 대체되도록하십시오 (라인 160).
7. 루프가 완료되면 'vVals'를 사용하여 새 유효성 검사 열을 작성하거나 기존 유효성 검사 열 (163-170 행)을 대체하십시오. '0', '1'및 '2'의 정수 값이 'Training', 'Validation'및 'Test'로 각각 표시되도록 '값 레이블'열 속성을 사용합니다.
8. '분배'변수와 함께 '분배'를 사용하여 응답의 각 레벨에 대한 유효성 검증 컬럼의 값을 표시하십시오.
일상적이지만 코드에는 몇 가지 명백하지 않은 측면이있을 수 있습니다.
• 우리는 사용자가 선택한 응답 열의 데이터 유형이나 모델링 유형에 대해 불필요한 가정을하지 않았습니다 (예 : 'Numeric', 'Continuous'열이 ' clumped ').
• 응답 열의 누락 값은 누락 된 값으로 생성 된 유효성 검사 열에 전파되므로 바람직합니다. 그러나 Numeric 열의 경우 '.' 값은 Distribution 플랫폼이 'By'그룹을 '.'그룹으로 처리하려고 시도 할 때 양호한 JMP 경고를 발생시킵니다. 값. 문자 열의 경우 null 문자열 ""은 '없음'그룹의 다른 레벨과 마찬가지로 경고없이 처리됩니다.
• 42 행의 'ColListBox ()'표현식은 테이블에 존재하더라도 선택을위한 행 상태 열을 표시하지 않으므로이 경우 바람직합니다.
JMP를 사용하고 코드를 고치기를 원한다면 더 많은 것을 배울 수있는 많은 방법이 있습니다. 이걸 보면서 시작할 수 있어요. 파일 교환 항목 .