시뮬레이션을 위해 프로파일러에서 상관 행렬을 지정하는 방법은 무엇입니까?안녕하세요,
샘플 데이터 집합에서 지정된 수의 행, 평균/표준 편차 벡터 및 상관 구조를 사용하여 다변량 정규 데이터를 생성하는 스크립트를 작성하고 있습니다. Profiler 플랫폼의 시뮬레이터를 활용하여 다음 단계를 통해 데이터 테이블을 생성하고 싶습니다.
- 각 변수에 대한 표본 평균과 표준편차를 계산합니다.
- 샘플 데이터에서 상관관계 매트릭스를 생성합니다.
- (1)과 (2)의 요약 통계를 사용하여 다변량 데이터를 시뮬레이션합니다.
현재 내 스크립트는 각 변수에 대한 적절한 평균과 표준 편차로 시뮬레이션된 데이터 테이블을 생성하지만 변수 간의 상관 관계 구조를 올바르게 유지할 수 없습니다. 내 문제의 원인은 [ NxN 상관 관계] X 상관관계 명시적으로 상관관계 매트릭스를 지정하는 대신 변수를 사용하지만(예: [1 0.3 0, 0.3 1 0, 0 0 1]) 내 문제 해결 기술로는 해결책이 없습니다. 아래에 제공된 현재 스크립트 및 예상 대 실제 출력, 이러한 단계를 달성하는 방법에 대한 제안을 환영합니다.
JSL:
names default to here(1);
Try( Close( Data Table(dt) ) );
If( Is Empty( dt ),
Try( dt = Open(), Throw( "No data found" ) )
);
ncol = NCol(dt);
//Dialog Window.
Dlg = New Window("New Window",
<< Modal,
BorderBox(left(3), top(2),
V List Box(
TextBox("Simulate multivariate data"),
HListBox(
VListBox(
PanelBox("Select variables",
colListData = ColListBox(all,nLines,(min(ncol,10)))
),
),
PanelBox("Cast Selected Variables",
LineupBox(NCol(2), Spacing(3),
ButtonBox("Variables", colListY << Append(colListData << Get Selected)),
colListY = ColListBox(nLines(6), "numeric"))
),
//specifications - not in use.
PanelBox("Enter Specifications",
Spacer Box(Size(10, 1)),
HListBox(
VListBox(
Spacer Box(Size(5, 10)),
lsl1 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
lsl2 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
lsl3 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
lsl4 = Number Edit Box(, 3)
),
SpacerBox(Size(10,10)),
VListBox(
Spacer Box(Size(5, 10)),
usl1 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
usl2 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
usl3 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
usl4 = Number Edit Box(, 3)
)
),
),
PanelBox("Action",
LineupBox(NCol(1),
// OK button
Button Box("OK",
lsl_mat = J(4,1, .);
lsl_mat[1] = Eval(lsl1 << Get);
lsl_mat[2] = Eval(lsl2 << Get);
lsl_mat[3] = Eval(lsl3 << Get);
lsl_mat[4] = Eval(lsl4 << Get);
usl_mat = J(4,1, .);
usl_mat[1] = Eval(usl1 << Get);
usl_mat[2] = Eval(usl2 << Get);
usl_mat[3] = Eval(usl3 << Get);
usl_mat[4] = Eval(usl4 << Get);
// Store summary statistics
tpListY = colListY << Get Items;
tpMean = J(4, 1, 0);
tpSD = J(4, 1, 0);
for (i=1, i <= nitems(tpListY), i++,
one_col = tpListY[i];
Meani = Col Mean(Column(dt, one_col));
SDi = Col Std Dev(Column(dt, one_col));
tpMean[i] = Meani;
tpSD[i] = SDi;
);
Dlg << CloseWindow
),
// Cancel button
Button Box("Cancel", Dlg << CloseWindow),
Spacer Box(Size(10,10)),
// Remove button
Button Box("Remove", collistY << RemoveSelected)
)
),
)
)
)
);
//correlation matrix
corr = multivariate(
Y(Eval List(tpListY)),
estimation method("Row-wise"),
matrix format("Square"),
scatterplot matrix(0)
);
corr.run = corr << run;
corr.rep = corr.run << report;
corr.mat = corr.rep["Correlations"][matrix box(1)] << get(1);
//only used to launch profiler
prof.x = J(2,4 ,1);
prof.tbl = as table(prof.x, << column names(tpListY), << invisible);
prof.tbl << new column("Y",
Formula( :TP1 + :TP2 + :TP3 + :TP4)
);
prof.tbl = current data table();
random reset(1234);
//specify multivariate data from summary statistics
sim.design = Profiler(
Y(:Y),
Invisible
);
sim.design << Simulator(
1,
Factors(
TP1 << multivariate( tpMean[1], tpSD[1]),
TP2 << multivariate( tpMean[2], tpSD[2]),
TP3 << multivariate( tpMean[3], tpSD[3]),
TP4 << multivariate( tpMean[4], tpSD[4]),
),
X Correlations(
1,
tpListY,
corr.mat
),
N Runs(10000)
);
//Make data table
report( sim.design )["Simulate to Table"][button box( 1 )] << click( 1 );
sim.dt = data table( 1 );
sim.dt << set name( "Simulated multivariate data" );
sim.dt << delete columns({"Y","Obj"});예상 출력과 실제 출력:
expectedvsactualexpectedvsactual예상 대 실제
자동화 및 스크립팅데이터 탐색 및 시각화Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @eangello ,
아주 좋아요! 나는 확실히 더 짧고 더 우아한 코드를 좋아합니다(그렇게 잘하지는 못하지만). 궁금해서, 평균 및 표준 편차와 상관 행렬로 작업한 결과가 평균 및 공분산 행렬로만 작업한 것과 (거의) 동일한 시뮬레이션 데이터를 제공하는지 확인했습니까?
이 다른 접근 방식이 제대로 작동하지 않아 죄송하지만 작업 중인 다른 데이터에 이식할 수 있는 좋은 솔루션을 찾았다는 점에 기쁩니다. 시뮬레이션된 데이터에 대한 일부 모델링을 테스트하여 실제 데이터에 구축된 모델과 비교하는 방법을 확인하고 있습니다. 실제 데이터 세트가 상대적으로 작을 때 이것이 매우 도움이 될 수 있는 부분을 볼 수 있으며 시뮬레이션된 데이터는 적어도 초기에 배포한 다음 더 많은 데이터가 들어올 때 업데이트할 수 있는 그다지 끔찍하지 않은 모델을 구축할 수 있는 기회를 제공할 수 있습니다. . 즉, 충분히 큰 데이터 세트가 생성될 때까지 몇 달 동안 기다리는 것이 아닙니다. 때로는 "완벽"하지 않더라도 모델을 제자리에 두는 것이 가치가 있습니다.
토론과 학습 포인트에 감사드립니다!
행운을 빌어요!,
DS
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @SDF1 ,
나는 그 접근 방식을 생각하지 않았을 것입니다. 대화 창에 관해서는 당신이 옳다고 생각합니다. 좀 더 자세히 살펴봐야 할 것 같습니다. Profiler 플랫폼을 모두 피하는 것이 골칫거리가 덜한 것으로 판명되었지만 나에게는 잘 풀리지 않은 것이 좋은 생각이었습니다. 다음은 동일한 결과이지만 소란이 적고(R에서 구현하는 단계와 유사) 입력으로 필요한 평균 벡터 및 공분산 행렬만 있습니다.
//tpListY is variables.<BR /><BR />cov = multivariate(
Y(eval list(tpListY)),
estimation method("Row-wise"),
matrix format("Lower Triangular"),
scatterplot matrix(1)
);
cov << covariance matrix(1);
cov.run = cov << run;
cov.rep = cov.run << report;
cov.mat = cov.rep["Covariance Matrix"][matrix box(1)] << get(1);
random reset(1234);
//generate X = (X1, . . . , Xn) where X ∼ MNn(µ, Σ) using the Cholesky decomposition of Σ
//to find (nxn) matrix, C, such that C*C` = Σ.
//let Z = (Z1, . . . , Zn)` where the Zi’s are IID N(µ, 1) for i = 1, . . . , n.
//mean.M is mean vector.
sim.n = 1e4;
dummy.mat = j(1,sim.n,1);
mean.mat = mean.M*dummy.mat;
n.means = n row(mean.M);
sim.C = cholesky(cov.mat);
sim.Z = j(n.means, sim.n, random normal());
sim.X = sim.C*sim.Z;
sim.X2 = sim.X + mean.mat;
sim.Xt = transpose(sim.X2);
as table(sim.Xt, << column names(tpListY));
나는 동일한 작업을 수행하기 위해 더 적은 코드를 사용하는 것을 선호하므로 프로파일러 경로보다 이것이 더 매력적이었습니다. 이를 통해 다른 곳에서 더 쉽게 구현할 수 있기를 바랍니다.
다시 한 번 감사드립니다.
이안젤로
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @eangello ,
N 열로 확장 가능한 스크립트를 작성할 수 있었던 것 같습니다. 나는 주다 @ms 프로파일러의 상관 관계 부분을 일반화하는 데 도움을 준 엄청난 공로. 그 스레드는 여기 .
두 개의 스크립트가 있는데, 구현한 것과 같은 독립 실행형 버전이지만 원래 게시물에 있던 추가 변수가 없는 버전과 데이터 테이블 자체에서 실행할 수 있는 스크립트가 있습니다. 독립형은 아래에 있고 데이터 테이블에서 실행할 것은 Gendt.jmp 데이터 테이블에 있습니다. 그것은 4개의 열이 있는 데이터 테이블과 11개의 열로 만든 다른 데이터 테이블 모두에서 작동합니다. 또한 다른 열 유형이 있는 데이터 테이블에 대한 독립 실행형 스크립트를 일반화하려고 했습니다.
Names Default To Here( 1 );
// Expression to clear all current settings
clearRoles = Expr( ColListY << RemoveAll );
// Expression to store the current settings in global variables
recallRoles = Expr(
::ycolRecall = ColListY << GetItems
);
//get data table
Try( Close( Data Table( dt ) ) );
If( Is Empty( dt ),
Try( dt = Open(), Throw( "No data found" ) )
);
//Find the number of columns in the data table
ncol = N Col( dt );
ColList = dt << Get Column Names( Numeric, Continuous );
//Dialog Window.
Dlg = New Window( "New Window",
<<RETURN result=""></RETURN>
또한 받은 Button Box 오류는 대화창에 대한 <<< Return Result로 교체했는데 더 이상 오류가 발생하지 않습니다. 나는 또한 리콜 버튼을 포함시켰지만, 당신은 그것을 가질 필요가 없습니다.
이것이 도움이 되기를 바랍니다. 이것은 정말 멋졌고 그것으로부터 많은 것을 배웠습니다. 나는 내가 하는 일에 이것을 확실히 사용할 수 있을 것이라는 것을 압니다!
감사해요!,
DS
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @eangello ,
당신이 상관관계 구조로 무엇을 하려는지 깨달았을 때 그것이 바로 내 마음을 스쳐지나간 것입니다. 귀하의 아이디어를 빌려 제가 직면하고 있는 특정 문제에 맞게 수정하고 싶습니다. N 입력으로 일반화하는 방법에 대해 다른 스레드에 게시했습니다. 나는 꽤 가깝다고 생각하지만 거기까지는 아닙니다. X Correlations()를 호출하고 요인에 대한 평균 및 std dev 값을 설정할 때 확장하는 데 어려움이 있습니다.
제가 작업하고 있는 모의 데이터 테이블과 스크립트가 첨부되어 있습니다. 모두 원본 스크립트를 기반으로 합니다. 내가 저지른 실수를 찾을 수 있을까요? 나는 이것이 임의의 수의 열에 대해 작동하는 것을 보고 싶습니다. 당신이 지적한 것처럼 기록 데이터에 매우 도움이 될 것입니다.
감사해요!,
DS
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @SDF1 ,
저는 일반적으로 일부 과거 매개변수를 기반으로 모델링 목적(모델 튜닝)을 위해 다변량 데이터 세트를 자주 시뮬레이션합니다. 이 스크립트는 이 모의 데이터를 제공하기 위한 간단한 솔루션이었습니다. 지금 당장은 구체적인 사용 사례가 없지만 이 스크립트를 n차원으로 확장하고 잠재적으로 기능적으로 사용할 계획입니다. 기준 치수 대규모 샘플 기술을 사용하는 보다 광범위한 스크립트에 통합할 수 있습니다. 평균/표준편차 벡터 및 상관 행렬을 프로파일러 플랫폼으로 보내는 데 제약이 있으므로 시뮬레이션을 n차원으로 확장하기 위해 선형 작업을 명시적으로 작성해야 할 것입니다.
문안 인사,
이안젤로
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @eangello ,
훌륭한 솔루션이며 그렇게 기억했으면 좋았을 것입니다. 일부 모델 튜닝을 자동화하기 위해 스크립트를 작성할 때 비슷한 작업을 수행해야 했습니다. EvalInsert()와 따옴표를 위한 이스케이프 문자와 값을 삽입하는 ^^이 매우 도움이 되었습니다. 나는 그것을 자주 사용하지 않고 특정 작업 방식을 잊어 버렸습니다.
궁금한데, 지정된 상관 관계 구조로 이와 같은 시뮬레이션 데이터를 생성해야 하는 이유는 무엇입니까? 나는 그것을 내가 작업하고 있는 일부 것들에 통합하는 방법에 대한 몇 가지 아이디어를 제공했기 때문에 매우 관심이 있습니다.
감사해요!,
DS
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @SDF1 ,
문제 해결에 도움을 주셔서 감사합니다. 대단히 감사합니다. 나는 다음과 같은 유사한 기능을 가지고 놀았습니다. 평가, 평가 Expr( Expr(x) ) , 그리고 Evalinsert Profiler로 보내기 전에 열과 행렬 변수를 강제로 평가하여 솔루션을 찾았습니다. X 상관관계 받아들일 것 같다). 위에서 동일한 솔루션을 적용하여 프로필러를 다른 열 이름에 유연하게 적용했습니다. 이제 내 상관 관계 구조가 시뮬레이션된 데이터에서 유지됩니다.
new.design = evalinsert(
"\[sim.design << Simulator(
1,
Factors(
Name( "^col1^" ) << multivariate( tpMean[1], tpSD[1]),
Name( "^col2^" ) << multivariate( tpMean[2], tpSD[2]),
Name( "^col3^" ) << multivariate( tpMean[3], tpSD[3]),
Name( "^col4^" ) << multivariate( tpMean[4], tpSD[4]),
),
X Correlations(
1,
^tpListY^,
^corr.mat^
),
N Runs(10000)) ]\");
eval(parse(new.design));
다시 한 번 감사드립니다.
EA
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @eangello ,
데이터 테이블에 감사드립니다. 말씀하신 대로 문제를 재현할 수 있습니다. 내가 주목하고 있는 한 가지는 시뮬레이터를 실행할 때 X 상관 관계에 대한 도움말 색인의 타이어 트레드 예제와 달리 프로파일러 옆에 히스토그램을 생성하지 않는다는 것입니다.
두 가지 일이 진행되고 있다고 생각합니다.
1. tpListY 호출
2. corr.mat 호출
이유는 잘 모르겠지만 코드의 X 상관 관계에 대한 목록을 명시적으로 "철자화"해야 하며 여기에는 상관 행렬이 포함됩니다. 따라서 tpListY를 호출하는 대신 이를 {TP1, TP2로 바꿔야 합니다. , TP3, TP4}. 마찬가지로 대괄호[] 사이에 실제 4x4(또는 NxN) 상관 행렬을 넣어야 합니다.
Parse(tpListY[1]) 와 같은 작업을 수행하면 작동할 것이라고 생각했지만 Eval()을 감싸더라도 작동하지 않습니다. JSL 코드를 {TP1, TP2, TP3, TP4}로 입력해야만 자동으로 작동하도록 할 수 있습니다. NxN 상관 행렬을 입력하면 실제로 행렬의 왼쪽 아래 삼각형을 사용하여 테이블을 채웁니다.
나는 또한 corr.mat[1] 등에서와 같이 corr.mat의 요소를 호출하는 것이 작동할 것이라고 생각했지만 그것도 작동하지 않습니다. 그렇게 하려고 하면 잘못된 매트릭스 토큰 오류가 발생합니다. corr.mat의 요소가 숫자이기 때문에 그 이유는 확실하지 않습니다.
아래 코드(함수를 약간 수정하여 수정함)는 예상 출력을 제공하지만 4x4 시스템에서 NxN 시스템으로 확장하려는 욕구에는 도움이 되지 않습니다.
names default to here(1);
Try( Close( Data Table(dt) ) );
If( Is Empty( dt ),
Try( dt = Open(), Throw( "No data found" ) )
);
ncol = NCol(dt);
//Dialog Window.
Dlg = New Window("New Window",
<< Modal,
BorderBox(left(3), top(2),
V List Box(
TextBox("Simulate multivariate data"),
HListBox(
VListBox(
PanelBox("Select variables",
colListData = ColListBox(all,nLines,(min(ncol,10)))
),
),
PanelBox("Cast Selected Variables",
LineupBox(NCol(2), Spacing(3),
ButtonBox("Variables", colListY << Append(colListData << Get Selected)),
colListY = ColListBox(nLines(6), "numeric"))
),
//specifications - not in use.
PanelBox("Enter Specifications",
Spacer Box(Size(10, 1)),
HListBox(
VListBox(
Spacer Box(Size(5, 10)),
lsl1 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
lsl2 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
lsl3 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
lsl4 = Number Edit Box(, 3)
),
SpacerBox(Size(10,10)),
VListBox(
Spacer Box(Size(5, 10)),
usl1 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
usl2 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
usl3 = Number Edit Box(, 3),
Spacer Box(Size(5, 10)),
usl4 = Number Edit Box(, 3)
)
),
),
PanelBox("Action",
LineupBox(NCol(1),
// OK button
Button Box("OK",
lsl_mat = J(4,1, .);
lsl_mat[1] = Eval(lsl1 << Get);
lsl_mat[2] = Eval(lsl2 << Get);
lsl_mat[3] = Eval(lsl3 << Get);
lsl_mat[4] = Eval(lsl4 << Get);
usl_mat = J(4,1, .);
usl_mat[1] = Eval(usl1 << Get);
usl_mat[2] = Eval(usl2 << Get);
usl_mat[3] = Eval(usl3 << Get);
usl_mat[4] = Eval(usl4 << Get);
// Store summary statistics
tpListY = colListY << Get Items;
tpMean = J(4, 1, 0);
tpSD = J(4, 1, 0);
for (i=1, i <= nitems(tpListY), i++,
one_col = tpListY[i];
Meani = Col Mean(Column(dt, one_col));
SDi = Col Std Dev(Column(dt, one_col));
tpMean[i] = Meani;
tpSD[i] = SDi;
);
Dlg << CloseWindow
),
// Cancel button
Button Box("Cancel", Dlg << CloseWindow),
Spacer Box(Size(10,10)),
// Remove button
Button Box("Remove", collistY << RemoveSelected)
)
),
)
)
)
);
//correlation matrix
corr = multivariate(
Y(Eval List(tpListY)),
estimation method("Row-wise"),
matrix format("Square"),
scatterplot matrix(0)
);
corr.run = corr << run;
corr.rep = corr.run << report;
corr.mat = corr.rep["Correlations"][matrix box(1)] << get(1);
//only used to launch profiler
prof.x = J(200,4 ,1);
prof.tbl = as table(prof.x, << column names(tpListY), << invisible);
prof.tbl << new column("Y",
Formula( :TP1+:TP2^2-:TP3+:TP4*Random Normal(0,2))
);
prof.tbl = current data table();
random reset(1234);
//specify multivariate data from summary statistics
sim.design = Profiler( Y( :Y ), Invisible );
sim.design << Simulator(
1,
Factors(
TP1 << multivariate( tpMean[1], tpSD[1] ), TP2 << multivariate( tpMean[2], tpSD[2] ),
TP3 << multivariate( tpMean[3], tpSD[3] ), TP4 << multivariate( tpMean[4], tpSD[4] ),
),
Responses( Y << No Noise ),
Automatic Histogram Update( 1 ),
X Correlations( 1, {TP1, TP2, TP3, TP4},
[1 0.6401843997 0.670478399654806 0.6405126152, 0.6401843997 1 0.9443055859 0.8815992957, 0.6704783997 0.9443055859 1 0.9355872238, 0.6405126152 0.8815992957 0.9355872238 1]
),
N Runs( 10000 ),
Simulate
);
//Make data table
report( sim.design )["Simulate to Table"][button box( 1 )] << click( 1 );
sim.dt = data table( 1 );
sim.dt << set name( "Simulated multivariate data" );
sim.dt << delete columns({"Y","Obj"});요인에 대한 다변량 노이즈를 채우기 위해 tpMean 및 tpSD의 요소를 호출할 수 있으므로 이를 수행하는 방법이 있어야 합니다. JSL에 대한 경험이 더 많은 사람이 이에 대해 언급해야 할 수도 있습니다.
마지막으로, 버튼 상자 중 하나에 대해 귀하가 옳다고 생각하지만 정확히 지적할 수 없었습니다. tpListY 및 corr.mat 문제를 해결하는 데 더 집중했습니다! 
나는 당신이 알아내는 것에 정말로 관심이 있습니다.
행운을 빌어요,
DS
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @SDF1 ,
게시하기 전에 실사를 하지 않았습니다. 다음은 샘플 데이터(X 4개, TP1-TP4)의 10개 행 샘플입니다. 현재 스크립트는 4개의 변수로 제한되어 있지만 이를 확장할 수 있기를 바랍니다. N 앞으로 변수. 이 샘플 데이터 테이블은 내 문제를 재현합니다. 해결되지 않은 이름 오류는 대화 상자(취소/제거 버튼일 수 있음)에서 발생한 것으로 생각되지만 근본 원인을 찾지 못했습니다.
감사해요,
EA
Re: 시뮬레이션을 위해 프로파일러에서 상관관계 매트릭스를 지정하는 방법은 무엇입니까?안녕 @eangello ,
흥미로운 질문입니다. 가능하면 도움을 드리고 싶지만 문제를 재현할 수 없습니다. 스크립트를 실행하려고 하면 샘플 데이터 디렉터리에서 데이터 테이블을 열라는 메시지가 표시됩니다. 여기서 한 가지 문제는 작업 중인 데이터 테이블이 무엇인지 모르고 동일한 문제가 발생하지 않는다는 것입니다. 작업 중인 데이터 테이블을 제공할 수 있습니까?
샘플 데이터(예: 2D 가우시안 프로세스 example.jmp 파일)에서 데이터 테이블을 선택하면 다음 대화창에서 열을 역할로 캐스팅하라는 메시지가 표시되지만 확인을 클릭하면 해결되지 않은 오류가 있다는 오류가 표시됩니다. name 'Button'의 지나친 이름 또는 평가, Button(-1) /*###*/. 그런 다음 sim.design << Simulator() send 명령이 마음에 들지 않는 코드의 124행에서 또 다른 오류가 발생합니다.
분명히 이것이 작동하는 데이터 테이블이 있습니다. 당신은 그것을 공유할 수 있습니까? 또는 게시물에 표시된 출력을 생성하는 데 사용하는 테이블에 대한 자세한 정보를 제공하시겠습니까?
감사해요!,
DS