cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Check out the JMP® Marketplace featured Capability Explorer add-in
Choose Language Hide Translation Bar
Chang114
Level II

如何排列因素做主成分的腳本

  大家好,我在腳本說明書中好像找不到關於排列組合的資訊,我需要一點方向,因為也是重複執行,會是使用"FOR"函數嗎?

比如我有6個因子( :pH, :ORP, :EC, :DO, :TN, :TP ),我需要執行3~6個不同組合因子且不排序的主成分,全部結果會有42種。

另外報告中滑鼠右鍵的''save principal components''有辦法使用腳本執行嗎?以下是我嘗試的腳本,顯然是不成功的。

任何建議都表示感謝。

names default to here(1);
dt = Current Data Table();
dto = New Table("Output", 
 New Column("PCA"),
 Add Rows(1),
);
pca = dt << Principal Components(
 Y( :pH, :ORP, :EC, :DO, :TN, :TP ),
 Estimation Method( "Default" ),
 "on Correlations"
);
dto:PCA[i] = (report(pca)["save Principal components"] << get)[1];
pca(report)<<close window;

 

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: 如何排列因素做主成分的腳本

Here is an example using one of the JMP Sample Data tables.  It runs the PCA and Saves the Principal Component.  I am still confused about what you are trying to save to data table Output, but I showed how to save two guesses as to what you are attempting to save.

Please run the example below, and see what it does, and then give me some feedback.  Once I am able to get my understanding of what you are attempting to save to data table Output, modifying the script to allow you to run the 42 different combinations of parameters should not be hard to do.

names default to here(1);
dt = open("$SAMPLE_DATA\semiconductor capability.jmp");
dto = New Table("Output", 
 New Column("PCA"),
 Add Rows(1),
);
pca = dt << Principal Components(
	Y( :NPN1, :PNP1, :PNP2, :NPN2, :PNP3, :IVP1 ),
	Estimation Method( "Default" ),
	"on Correlations"
);

/*Principal Components(
 Y( :pH, :ORP, :EC, :DO, :TN, :TP ),
 Estimation Method( "Default" ),
 "on Correlations"
);*/

// The Save Principal Components saves the Factor Loadings for each observartion/Row to the original data table
pca << save Principal components(1) ;

// I appologize, but I still do not understand what you are attempting to save to the data table Output

// This code saves the Factor Loading for the first row to the Output table
dto:pca[1] = dt:Prin 1[1];

// This code saves the Eigenvalue for the Prinicipal Component to the data table
dt0:pca[1] = (report(pca)["Summary Plots"][NumberColBox(1)]<<get)[1];

//pca(report)<<close window;

 

Jim

View solution in original post

6 REPLIES 6
txnelson
Super User

Re: 如何排列因素做主成分的腳本

Excluding your code where you are trying to capture the "Saved Principal Components" everything looks fine, with one exception.

On Correlations is not specified as a literal string.  it is just specified without the quotes as

on Correlations

However, I am not understanding what you want to capture and place into the new data table you are creating.  You seem to be attempting to save row 1's Principal Component value for Principal Component 1.  That value only represents the loading onto PC 1 for that row.  

From your statements, I am wondering if what you are attempting to do, is to get a single value that is representative of the complete Principal Component 1.

Can you please clarify what you are trying to extract from each of your 42 combinations you want to run?

Jim
Chang114
Level II

Re: 如何排列因素做主成分的腳本

  你好,我需要的內容如附件(PCA)中箭頭位置,他需要使用滑鼠右鍵去選擇並決定要幾個成分後將結果貼在原本使用的數據表中,如附件(Prin)。

謝謝

PCA.png

Prin.JPG

txnelson
Super User

Re: 如何排列因素做主成分的腳本

Here is an example using one of the JMP Sample Data tables.  It runs the PCA and Saves the Principal Component.  I am still confused about what you are trying to save to data table Output, but I showed how to save two guesses as to what you are attempting to save.

Please run the example below, and see what it does, and then give me some feedback.  Once I am able to get my understanding of what you are attempting to save to data table Output, modifying the script to allow you to run the 42 different combinations of parameters should not be hard to do.

names default to here(1);
dt = open("$SAMPLE_DATA\semiconductor capability.jmp");
dto = New Table("Output", 
 New Column("PCA"),
 Add Rows(1),
);
pca = dt << Principal Components(
	Y( :NPN1, :PNP1, :PNP2, :NPN2, :PNP3, :IVP1 ),
	Estimation Method( "Default" ),
	"on Correlations"
);

/*Principal Components(
 Y( :pH, :ORP, :EC, :DO, :TN, :TP ),
 Estimation Method( "Default" ),
 "on Correlations"
);*/

// The Save Principal Components saves the Factor Loadings for each observartion/Row to the original data table
pca << save Principal components(1) ;

// I appologize, but I still do not understand what you are attempting to save to the data table Output

// This code saves the Factor Loading for the first row to the Output table
dto:pca[1] = dt:Prin 1[1];

// This code saves the Eigenvalue for the Prinicipal Component to the data table
dt0:pca[1] = (report(pca)["Summary Plots"][NumberColBox(1)]<<get)[1];

//pca(report)<<close window;

 

Jim
Chang114
Level II

Re: 如何排列因素做主成分的腳本

  你好,非常感謝,不過遇到了點問題,要如何抓到附圖(Eigenvalues)中的"cumulative Percent"數據。

以下是我編輯完的腳本:

Names Default To Here( 1 );
dt = Data Table("PCA TEST");
dto = New Table("Output", 
New Column("cumulative Percent"),
New Column("PCA1"),
New Column("PCA2"),
New Column("PCA3"),
New Column("PCA4"),
New Column("PCA5"),
New Column("PCA6"),

 Add Rows(9),
);
pca = dt << Principal Components(
 Y( :pH, :ORP, :EC, :DO, :TN, :TP ),
 Estimation Method( "Default" ),
 "on Correlations"
);
pca << save Principal components(6);
For(i=1,i<=9,i++,dto:pca1[i] = dt:Prin1[i]);
For(i=1,i<=9,i++,dto:pca2[i] = dt:Prin2[i]);
For(i=1,i<=9,i++,dto:pca3[i] = dt:Prin3[i]);
For(i=1,i<=9,i++,dto:pca4[i] = dt:Prin4[i]);
For(i=1,i<=9,i++,dto:pca5[i] = dt:Prin5[i]);
For(i=1,i<=9,i++,dto:pca6[i] = dt:Prin6[i]);
/*dto:cumulative Percent[1] = (report(pca)["Eigenvalues"][NumberColBox(5)]<<get)[1];*/

pca(report)<<close window;
txnelson
Super User

Re: 如何排列因素做主成分的腳本

Use
NumberColBox(4)
Jim
Chang114
Level II

Re: 如何排列因素做主成分的腳本

    你好,非常感謝你的幫助,我發現需要在主成分分析中添加一項'' Eigenvalues( 1 )'',才能使數據表抓到[NumberColBox(4)],如下

pca = dt << Principal Components(
 Y( :pH, :ORP, :EC, :DO, :TN, :TP ),
 Estimation Method( "Default" ),
 "on Correlations",
 	Eigenvalues( 1 )
);

 

另外想詢問,有辦法將組合寫成腳本嗎?想使用不同組合運行主成分,但不知如何下手。

 combination.JPG

再次感謝!