cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Browse apps to extend the software in the new JMP Marketplace
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 )
)
);