디자인 행렬의 열을 생성하는 수식 만들기<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />저는 JMP를 사용하는 초보자이며 JMP 커뮤니티에서 제 질문에 대한 유사한 답변을 찾을 수 없습니다. 여러 열이 있는 데이터 테이블이 있고 사용자가 데이터 테이블에서 열을 선택해야 한다고 가정하면 선택한 열에 따라 디자인 행렬이 생성됩니다. 선택한 열과 디자인 행렬이 새 데이터 테이블에 생성됩니다. 그러나 이것만으로는 충분하지 않습니다. 사용자가 새 데이터 테이블에서 선택한 열의 값을 변경하려는 경우 그에 따라 디자인 매트릭스가 업데이트됩니다. 내 문제는 아래 코드로 디자인 매트릭스를 올바르게 업데이트할 수 없다는 것입니다.
// 컬럼 선택 창 생성
// 창을 생성하기 위한 일부 코드 생략
CheckAndConvert = Expr(
selectedColumns = c << 항목 가져오기;
// 입력이 유효하면 계속 진행합니다.
If(N 항목(선택된 열) > 0,
win << 창 닫기;
A = 열(선택된 열);
s = A << GetAsMatrix; // s에서 선택 열을 추출합니다.
// 새 데이터 테이블 "Design Matrix" 생성
dt = New Table("디자인 매트릭스");
dt << New Column("조각", 숫자, 값(s[0, 1])); // 새 데이터 테이블의 "slice" 열에 s를 복사합니다.
// 디자인 행렬의 해당 열을 생성하고 새 데이터 테이블에 추가
For( i=1, i<=Col Max(dt:slice), i++,
dt << New Column("X"||Char(i), 숫자,
마지막 후,
공식(
If(dt:슬라이스 == i, 1,
0
)
)
);
);
);
);
추신: 슬라이스 열의 값을 변경하지 않고 코드를 실행하면 정답을 얻을 수 있지만 슬라이스 값을 변경하면 X 열을 업데이트할 수 없습니다. X 열의 수는 슬라이스 열의 최대 값이며 다른 값으로 고정되지 않습니다. 다음 그림에서는 테스트 데이터에서 열 1과 열 2를 선택하는 예를 보여줍니다.
미리 감사드립니다.
풀롱
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.죄송합니다. 귀하의 요청을 다시 읽고 JSL 기능 중 어느 것도 이 경우에 도움이 되지 않는다는 것을 깨달았습니다. 선형 회귀에 대한 범주형 요인의 효과에 대한 열을 만들기 위한 것입니다.
다음은 요인 수준이 있는 행렬을 가져오고 2차 다항식의 각 항에 대한 열이 있는 행렬을 만드는 스크립트입니다.
Names Default to Here( 1 );
x2fx = Function( { x }, { n factors, n treat, fx, f, f1, f2 },
n factors = N Col( x );
n treat = N Row( x );
fx = J( n treat, 1, 1 );
For( f = 1, f <= n factors, f++,
fx ||= x[0,f];
);
For( f1 = 1, f1 < n factors, f1++,
For( f2 = f1+1, f2 <= n factors, f2++,
fx ||= x[0,f1] :*</img> x[0,f2];
);
);
For( f = 1, f <= n factors, f++,
fx ||= x[0,f]^2;
);
fx;
);
X = [1 10,
2 20,
3 10,
4 20,
5 15,
6 15];
D = x2fx( X );
Show( D );
자신만의 함수를 만드는 것은 그리 어렵지 않습니다.
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.도움말 > 스크립팅 색인을 참조하십시오. 함수를 표시하도록 브라우저를 변경합니다. 그런 다음 기능의 매트릭스 그룹을 선택합니다. 설계 행렬(요인 수준)에서 모델 행렬(용어)을 만드는 몇 가지 기능을 찾을 수 있습니다.
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.
비슷한 질문이 있다고 생각합니다.
Matlab의 x2fx와 유사한 예측 변수에서 설계 행렬을 만들고 싶습니다.
예: 예측 변수를 선택하고 디자인 유형(2차 상호 작용)을 지정한 다음 디자인 테이블을 생성합니다.
아래 Matlab의 예를 참조하십시오. (하지만 JMP에서 이 작업을 수행하고 싶습니다.)
예 1
다음은 2개의 예측자를 변환합니다.<FONT face="Courier New" size="3"> X1</FONT> 그리고<FONT face="Courier New" size="3"> X2</FONT> (의 열<FONT face="Courier New" size="3"> 엑스</FONT> ) 항이 있는 전체 2차 모형의 설계 행렬로<FONT face="Courier New" size="3"> 끊임없는</FONT> ,<FONT face="Courier New" size="3"> X1</FONT> ,<FONT face="Courier New" size="3"> X2</FONT> ,<FONT face="Courier New" size="3"> X1.*X2</FONT> ,<FONT face="Courier New" size="3"> X1.^2</FONT> , 그리고<FONT face="Courier New" size="3"> X2.^2</FONT> .
X = [1 10
2 20
3 10
4 20
5 15
6 15];
D = x2fx(X,'quadratic')
D =
1 1 10 10 1 100
1 2 20 40 4 400
1 3 10 30 9 100
1 4 20 80 16 400
1 5 15 75 25 225
1 6 15 90 36 225 Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.도움을 주셔서 정말 감사합니다.
오늘 내 문제에 대한 해결책을 이미 찾았습니다.
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.네, 감사합니다.
따라서 누락된 부분이 보고서 창에서 (숫자) 열의 셀을 편집할 수 있는 것처럼 들립니다. 이 경우 'NumberColEditBox()'를 사용할 수 있습니다. 문자 열의 경우 'StringColEditBox'를 사용할 수 있습니다. 두 가지를 결합하면 코드가 제어하는 편집기 창에 모든 테이블을 표시할 수 있습니다(행 상태 및 표현식 열을 건너뛰어야 할 것 같습니다).
NamesDefaultToHere ( 1 ) ;
// 숫자 열 사용
dt = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.JMP" ) ;
이름 = "키" ;
cVal = 열 ( dt , 이름 ) << getValues ;
// UI
nw = 새창 ( "셀 편집" , 셉 = NumberColEditBox ( 이름 , cVal ) , 버튼박스 ( "업데이트" , 업데이트 셀 )) ;
// 스크립트 업데이트
업데이트 셀 =
만료 (
nw << 닫기창 ;
newVals = 셉 << getAsMatrix ;
dt << 데이터 업데이트 시작 ;
열 ( dt , 이름 ) << setValues ( newVals ) ;
dt << EndDataUpdate ;
) ;
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.답장을 보내 주셔서 감사합니다. 작업 흐름에 대한 귀하의 이해가 바로 제가 하고 있는 일입니다.
"슬라이스 정의" 관련:
이 작업을 수행하기 위해 이미 창을 디자인했습니다.
"슬라이스 업데이트" 관련:
어려움은 사용자가 어떤 변경을 하든 자동으로 업데이트된다는 데 있습니다. 디자인 매트릭스를 생성할 수 있지만 사용자가 슬라이스 열을 변경하면 디자인 매트릭스를 자동으로 업데이트하는 방법을 모르겠습니다. 게다가 디자인 매트릭스를 자동으로 업데이트하는 방법을 알고 있다면 코드를 약간만 수정하면 디자인 매트릭스를 기반으로 다른 열을 자동으로 생성하는 것도 문제가 되지 않을 것입니다.
감사해요,
풀롱
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.더 자세한 설명에 감사드립니다. 내가 이해했는지 확인하기 위해 다른 단어로 되풀이할 수 있을까요?
첫 번째 테이블(가능한 모든 슬라이스 포함)이 dt0이라고 가정합니다. 위의 주요 단계에 대해 생각해 보십시오.
- 사용자는 dt0에서 열(슬라이스)을 선택하고 이 슬라이스와 디자인 매트릭스의 열(언급한 다른 파생 열 포함)을 포함하는 새 테이블(dt1이라고 함)을 만듭니다. .
- 나중에 사용자가 dt1의 슬라이스 열을 수정하고 dt1의 다른 열을 '자동으로' 업데이트할 수 있기를 원합니다.
최종 추가 기능에는 '슬라이스 정의'와 '슬라이스 업데이트'라는 두 가지 메뉴 옵션이 있을 것입니다. 위의 1.에 대한 내 설명이 맞다면 이 'Design Slice' 스크립트는 내가 이미 제안한 코드를 수정하여 쉽게 얻을 수 있습니다. 테이블 또는 그 안의 열에 원하는 메타데이터.
'Update Slice' 스크립트는 공유 폴더에서 사용 가능한 모든 테이블을 사용자에게 제공하고 사용자가 하나를 선택할 수 있도록 합니다. 그러나 이 시점에서는 테이블을 직접 편집하지 않습니다. 대신 테이블의 조각 열 값을 수정할 수 있는 보고서 창이 표시됩니다. 여기서 '수정'은 기존 값을 업데이트하거나 새 행을 추가하는 것을 의미할 수 있습니다. 그들이 이 보고서에서 확인을 클릭하여 행복하다는 것을 나타내면 dt1이 자동으로 업데이트되어 모든 변경 사항을 반영할 수 있으며 필요에 따라 메타데이터를 업데이트할 수도 있습니다. 물론 이 '업데이트' 코드는 'Define Slice'와 공통일 것입니다.
제가 잘못 이해한 것이 아니라면 이 워크플로우는 사용자에게 dt1 자체에 대한 무료 액세스를 제공하는 것보다 훨씬 더 합리적일 것 같습니다.
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.JMP를 처음 사용하는 것이기 때문에 JMP 스크립트의 언어로 문제를 설명하려고 합니다. 간단히 말해서 "슬라이스" 열이 있는 데이터 테이블이 있고 슬라이스 열을 기반으로 디자인 매트릭스를 생성하고 디자인 매트릭스를 기반으로 다른 열도 생성하려고 합니다. 내가 해야 할 일은 이 작업을 구현하는 JMP 추가 기능을 개발하여 다른 동료들도 컴퓨터 실험에 내 추가 기능을 사용할 수 있도록 하는 것입니다.
먼저 슬라이스 열을 선택하는 창을 만들고 슬라이스 열과 디자인 행렬을 포함하는 데이터 테이블을 생성하고 수식을 저장하고 싶습니다. 슬라이스 열의 일부 값이 나중에 변경되면 디자인 매트릭스를 자동으로 업데이트합니다. . (프로젝트 매니저가 요청해서 수식을 저장해야 하는데, 더 나은 해결책이 나오면 수식 열을 사용하지 않고 그를 설득할 수 있습니다.)
이제 창을 만들고 슬라이스 열과 디자인 매트릭스를 포함하는 데이터 테이블을 생성할 수 있지만 슬라이스 열의 값을 변경하면 디자인 매트릭스를 업데이트할 수 없습니다.
슬라이스 열 관련:
JMP의 설계 기능이 설계 행렬을 자동으로 생성할 수 있다는 것을 알고 있지만 수식 열을 원하는 경우에는 도움이 되지 않습니다. 그래서 내 스크립트에 표시된 대로 설계 매트릭스를 생성하는 자체 기능을 작성했습니다. 슬라이스 열 a = [1, 1, 2, 3]'이 있다고 가정합니다. 그런 다음 디자인 매트릭스는 다음과 같이 생성됩니다.
1 0 0
1 0 0
0 1 0
0 0 1.
조각난 열은 매우 다양할 수 있으므로 조각 열을 수동으로 확인하여 설계 행렬에 몇 개의 열이 있는지 알기 어렵습니다. 게다가 슬라이스 열의 값은 임의로 수정할 수 있습니다.
설계 매트릭스를 생성하는 주요 단계는 다음과 같습니다.
1. 슬라이스 열을 선택하고 "확인" 버튼을 클릭하면 슬라이스 열과 디자인 행렬을 포함하는 새 테이블이 생성됩니다. 분명히 이 단계에는 수동 개입이 포함됩니다.
2. 새 테이블의 슬라이스 열에서 일부 값을 수동으로 수정하면 원래 디자인 행렬이 자동으로 삭제되고 해당하는 새 디자인 행렬이 생성됩니다.
둘째, 나도 디자인 매트릭스를 기반으로 몇 개의 컬럼을 생성해야 하고, 그것들을 생성하기 위한 스크립트도 작성했는데, 공식 컬럼으로 저장하는 방법을 모른다. 디자인 매트릭스에 대한 수식 열을 저장하는 방법을 알고 있다면 이 문제는 문제가 되지 않습니다.
마지막으로 디자인 매트릭스와 일부 열을 생성하는 데 성공하면 추가 기능으로 패키징하고 다양한 환경에서 테스트합니다.
제안해 주셔서 감사합니다. 내가 이해하게 된다면 알려주세요.
풀롱
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.나는 확실히 틀릴 수 있지만(솔루션이 얼마나 일반적인지에 따라 다름) 수식 열이 이것을 시도하는 가장 좋은 방법이라고 생각하지 않습니다. 원본 테이블의 한 열이 (일반적으로) 여러 열에 매핑된다는 사실과 그러한 열의 수가 원본 열의 (변수) 수준 수라는 사실이 이를 어렵게 만듭니다.
다른 제안을 하기 전에 구상 중인 작업 흐름에 대해 좀 더 자세히 설명해 주시겠습니까? 또한 어떤 단계에 수동 개입이 포함되는지 표시하십시오.
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.당신의 친절한 도움에 감사드립니다.
열에서 디자인 행렬을 생성해야 열의 값이 변경되는 경우 디자인 행렬도 업데이트할 수 있습니다. 실제로 선택한 열을 기준으로 디자인 행렬을 생성하는 수식을 만들고 선택한 열의 일부 값이 수정될 경우 디자인 행렬을 업데이트할 수 있도록 수식을 저장하고 싶습니다.
내 코드에서 디자인 행렬이 생성되지만 선택한 열의 특정 값을 변경하면 업데이트된 디자인 행렬을 가져올 수 없는 문제가 있습니다. 제 문제에 대한 제안을 해주시면 정말 감사하겠습니다.
감사해요,
풀롱
Re: 디자인 행렬의 열을 생성하는 수식을 만듭니다.나는 당신이 찾고 있는 것이 무엇인지 정확히 알지 못했습니다. 하지만 JMP를 처음 사용하는 경우 아래 코드를 통해 몇 가지 아이디어를 얻을 수 있습니다.
NamesDefaultToHere ( 1 ) ;
// 테스트 테이블
dt = 새 테이블 ( "시험" ,
NewColumn ( "C1" , 숫자 , 마디 없는 , 공식 ( RandomInteger ( 1 , 5 ))) ,
NewColumn ( "C2" , 숫자 , 마디 없는 , 공식 ( RandomInteger ( 1 , 5 ))) ,
NewColumn ( "C3" , 숫자 , 마디 없는 , 공식 ( RandomInteger ( 1 , 5 ))) ,
행 추가 ( 10 )
) ;
// UI
새창 ( "디자인 업데이트" ,
패널박스 ( "디자인을 보려면 열을 선택하세요" ,
럽 = 라인업박스 ( NCol ( 2 ) ,
clb = 콜리스트박스 ( dt , 모두 , 숫자 , 최대 항목 ( 1 ) , 최소 항목 ( 1 ) , clbScript ) )
)
) ;
// clb의 선택에 따라 라인업 상자 lb를 동적으로 업데이트하는 스크립트
clbScript =
만료 (
// 선택한 열의 값을 가져옵니다.
값 = 열 ( dt , clb << getSelected ) << getAsMatrix ;
// 기존 매트릭스 박스 삭제
노력하다 ( MB << 삭제 ) ;
// 행렬 상자에서 디자인 행렬을 가져옵니다.
MB = 매트릭스박스 ( 설계 ( 값 )) ;
// 새 행렬 상자를 추가합니다.
럽 << 추가 ( MB ) ;
) ;