cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Choose Language Hide Translation Bar
Sburel
Level IV

Error trying to create validation columns when trying to pass a variable in the proportion matrix

In the process of assessing the performance of ML model, I'm trying to create a UI that will specify the number of run the model will be doing and the specify the proportion of training and validation data.

 

I'm trying to pass that info into a for loop that will create the columns based on the number of run specified and also to pass in the proportions. The loop works fine when I specify the proportion (second example) but not when using variables (nTraining, nVal).

 

Some suggestions would be greatly appreciated.

 

Thanks.

 

S  

dtsub=New Table( "test",
	Add Rows( 34 ),
	New Column( "test_article",
		Character( 7 ),
		"Nominal",
		Set Values(
			{"1269442", "1100729", "1269449", "1269448", "1100723", "1100728",
			"1269456", "1269457", "1269458", "1269454", "1269468", "1269469",
			"1269466", "1269471", "1100397", "1100405", "1100406", "1100407",
			"1100528", "1100534", "1100535", "1100540", "1100542", "1100566",
			"1100585", "1100590", "1100725", "1100873", "1100914", "1100915",
			"1100920", "1100990", "1100991", "1101101"}
		),
		Set Display Width( 61 )
	),
	New Column( "basic_class",
		Character,
		"Nominal",
		Set Values(
			{"0_Active", "0_Active", "0_Active", "0_Active", "0_Active", "0_Active",
			"0_Active", "0_Active", "0_Active", "0_Active", "0_Active", "0_Active",
			"1_MarginalActive", "1_MarginalActive", "1_MarginalActive",
			"1_MarginalActive", "1_MarginalActive", "1_MarginalActive", "2_Inactive",
			"1_MarginalActive", "2_Inactive", "1_MarginalActive", "2_Inactive",
			"1_MarginalActive", "1_MarginalActive", "1_MarginalActive", "0_Active",
			"1_MarginalActive", "0_Active", "0_Active", "2_Inactive", "0_Active",
			"0_Active", "0_Active"}
		),
		Set Display Width( 90 )
	),
	Set Row States(
		[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1,
		1, 0, 1, 0, 0, 0, 0, 0, 0]
	)
);

nrun=10;
//the proportion forthe valdation column are specified here
nTraining = 0.75;
nVal = 0.25;

//getting this error 
//Invalid matrix token.
//Line 232 Column 38: ...ake Validation Formula( [►nTraining, nVal, 0], <<St...
For( i = 1, i <= nrun, i++,
	dtsub << New Column( "Testing",
		<<Hide( 1 ),
		Numeric,
		"Nominal",
		Format( "Best", 12 ),
		Formula( Make Validation Formula( [nTraining, nVal, 0], <<Stratification Columns( :basic_class ) ) ),
		Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ),
		Use Value Labels( 1 )
	)
);



//specifiying the proportions works fine 
For( i = 1, i <= nrun, i++,
	dtsub << New Column( "Testing",
		<<Hide( 1 ),
		Numeric,
		"Nominal",
		Format( "Best", 12 ),
		Formula( Make Validation Formula( [0.75, 0.25, 0], <<Stratification Columns( :basic_class ) ) ),
		Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ),
		Use Value Labels( 1 )
	)
);
1 ACCEPTED SOLUTION

Accepted Solutions
Sburel
Level IV

Re: Error trying to create validation columns when trying to pass a variable in the proportion matrix

Hi Thierry,

 

Your suggestion was in fact very close. You suggested building a 1x3 matrix when it needed a 3x1 matrix

dtstub= data table("test");

nrun=3;
nTraining = 0.75;
nVal = 0.25;

// Create the matrix
mat = J(3,1, {.}); // 1x3 matrix with missing values

mat [1,1] = nTraining;
mat [2,1] = nVal;
mat [3,1] = 0;

show (mat);

For( i = 1, i <= nrun, i++,
	data table("test") <<	

New Column( "Val",
	Numeric,
	"Nominal",
	Format( "Best", 12 ),
	Formula(
		EVal (Eval Expr (Make Validation Formula(
		expr(mat),
		//	[0.75, 0.25, 0],
			<<Stratification Columns( :basic_class )
		)
	))),
	Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ),
	Use Value Labels( 1 )
)
);

View solution in original post

7 REPLIES 7
Thierry_S
Super User

Re: Error trying to create validation columns when trying to pass a variable in the proportion matrix

Hi,

I think you need to specify the matrix in your last New Column statement (see below). I could not test it because your script has other errors.

nrun=10;
nTraining = 0.75;
nVal = 0.25;

mat = J(1,3);

mat [1,1] = nTraining;
mat [1,2] = nVal;
mat [1,3] = 0;


//getting this error 
//Invalid matrix token.
//Line 232 Column 38: ...ake Validation Formula( [►nTraining, nVal, 0], <<St...
For( i = 1, i <= nrun, i++,
	dtsub << New Column( "Testing",
		<<Hide( 1 ),
		Numeric,
		"Nominal",
		Format( "Best", 12 ),
		Formula( Make Validation Formula(mat), <<Stratification Columns( :basic_class ) ) ),
		Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ),
		Use Value Labels( 1 )
	);
Thierry R. Sornasse
Thierry_S
Super User

Re: Error trying to create validation columns when trying to pass a variable in the proportion matrix

SOrry for the typo in the JSL script. Here is the correct syntax.

nrun=10;
nTraining = 0.75;
nVal = 0.25;

mat = J(1,3);

mat [1,1] = nTraining;
mat [1,2] = nVal;
mat [1,3] = 0;


//getting this error 
//Invalid matrix token.
//Line 232 Column 38: ...ake Validation Formula( [►nTraining, nVal, 0], <<St...
For( i = 1, i <= nrun, i++,
	dtsub << New Column( "Testing",
		<<Hide( 1 ),
		Numeric,
		"Nominal",
		Format( "Best", 12 ),
		Formula( Make Validation Formula(mat, <<Stratification Columns( :basic_class ) ) ),
		Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ),
		Use Value Labels( 1 )
	)
);	
Thierry R. Sornasse
Thierry_S
Super User

Re: Error trying to create validation columns when trying to pass a variable in the proportion matrix

Sorry again, I tried to answer too quickly. I do not have the right version of JMP to test the issue, but I think I solved the problem.

nrun=10;
nTraining = 0.75;
nVal = 0.25;

mat = J(1,3);

mat [1,1] = nTraining;
mat [1,2] = nVal;
mat [1,3] = 0;


//getting this error 
//Invalid matrix token.
//Line 232 Column 38: ...ake Validation Formula( [►nTraining, nVal, 0], <<St...
For( i = 1, i <= nrun, i++,
	dtsub << New Column( "Testing",
		<<Hide( 0),
		Numeric,
		"Nominal",
		Format( "Best", 12 ),
		Formula( EVal (Eval Expr (Make Validation Formula(Expr (mat), <<Stratification Columns( :basic_class ) ) ))),
		Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ),
		Use Value Labels( 1 )
	)
);	
Thierry R. Sornasse
Sburel
Level IV

Re: Error trying to create validation columns when trying to pass a variable in the proportion matrix

Hi Thierry,

 

Thanks for the suggestion. Unfortunately,  it does not seem to work. Your suggestion results in a matrix without comma separation. The formula requires a comma-separated matrix. 

 

Best

 

S

Thierry_S
Super User

Re: Error trying to create validation columns when trying to pass a variable in the proportion matrix

Hi,

For the sake of exploring all avenues, have you tried to generate transposed matrix? 

nTraining = 0.75;
nVal = 0.25;

mat = J(3,1);

show (mat);

mat [1,1] = nTraining;
mat [2,1] = nVal;
mat [3,1] = 0;

show (mat);

//getting this error 
//Invalid matrix token.
//Line 232 Column 38: ...ake Validation Formula( [►nTraining, nVal, 0], <<St...
For( i = 1, i <= nrun, i++,
	dtsub << New Column( "Testing",
		<<Hide( 0),
		Numeric,
		"Nominal",
		Format( "Best", 12 ),
		Formula( Eval (Eval Expr (Make Validation Formula(Expr (mat), <<Stratification Columns( :basic_class ) ) ))),
		Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ),
		Use Value Labels( 1 )
	)
);	

I cannot tell if the formula will be accepted because I don't have JMP Pro available, but at least, it generates a Comma-delimited matrix in the Formula.

Sorry for not being of greater help.

 

Best,

TS

 

Thierry R. Sornasse
Sburel
Level IV

Re: Error trying to create validation columns when trying to pass a variable in the proportion matrix

I'll give it a shot and thanks for giving it a shot

Sburel
Level IV

Re: Error trying to create validation columns when trying to pass a variable in the proportion matrix

Hi Thierry,

 

Your suggestion was in fact very close. You suggested building a 1x3 matrix when it needed a 3x1 matrix

dtstub= data table("test");

nrun=3;
nTraining = 0.75;
nVal = 0.25;

// Create the matrix
mat = J(3,1, {.}); // 1x3 matrix with missing values

mat [1,1] = nTraining;
mat [2,1] = nVal;
mat [3,1] = 0;

show (mat);

For( i = 1, i <= nrun, i++,
	data table("test") <<	

New Column( "Val",
	Numeric,
	"Nominal",
	Format( "Best", 12 ),
	Formula(
		EVal (Eval Expr (Make Validation Formula(
		expr(mat),
		//	[0.75, 0.25, 0],
			<<Stratification Columns( :basic_class )
		)
	))),
	Value Labels( {0 = "Training", 1 = "Validation", 2 = "Test"} ),
	Use Value Labels( 1 )
)
);