Dear Petr,

The intention is to get a ratio value for every observations (1400 obs) for 
every variable (4 variables). 

And from the ratios, I would like to rank the variables based on how many times 
the variable being the highest among 4 of them (or the total number of being 
the highest ratios, out of 1400 times).

>From the 1400 by 4 dataset, I ran a principal component analysis and I'll use 
>only the first PC for the calculation of the ratios.

The PC (a vector) will has 4 values for each variables.

The ratios actually representing the contribution of a variable divide by the 
total contribution from the first PC.

Does it make sense to you now? Thank you very much for giving a response. I 
really appreciate it.

Best regards,
ayu




________________________________
From: Petr Pikal [via R] <ml-node+1458931-701777...@n4.nabble.com>

Sent: Mon, 1 February, 2010 15:58:50
Subject: Odp: How to repeat "for" function?

Hi 
few comments 

[hidden email] napsal dne 01.02.2010 14:51:17: 

> 
> Dear Users, 
> 
> I have one problem here, I tried many time and even read a few notes on 
> writing function but still..... 
> 
> 
> Can anyone help me on how to simplify Part B (please refer the 
programming 
> below), so that I don't have to repeat the calculation of "num" and "r" 
? 

> 
> 
> 
> Thank you very much..every help is very much appreciated... 
> 
> 
> ## Part A 
> n=1400 
> m=matrix(c(0,0,0,0),4,1) 
> m2=matrix(c(0,2,0,0),4,1) 
> c4<-matrix(c(1.0,0.2,-0.5,0.3,0.2,1,0.2,-0.5,-0.5,0.2,1,0.2,0.3,-0.5,0.2,1),4,4,byrow=T)
>  
> set.seed(428) 
> X=mvrnorm(n,m2,c4) 
> X.pca<-princomp(X) 
> loadings(X.pca) 
> pc=X.pca$loadings[,1] 
> 
> ##  Part B 
> num1=rep(1:n) 

is same as 
num1 <- 1:n 

> for(i in 1:n)num1[i]=pc[1]%*%X[i,1] 

If I understand what the above code does I am a bit surprised 

pc[1] is 
> pc[1] 
[1] 0.525037 

for each number in cycle 

X[i,1] is again a number 

> X[1,1] 
[1] 0.7512862 
> X[2,1] 
[1] 0.5020333 
> 

so it basically  results in 

pc[1] * X[,1] 

which you can compute for all 4 columns by 

kronecker(pc, X, "*") 

But I wonder if this is what you really want. 

Maybe you shall think it over again and try with some smaller manageable 
subset lit 

smallX <- X[1:5,] 

do all your computation and if it does not produce what you want, specify 
what you want. 

Regards 
Petr 



> num2=rep(1:n) 
> for(i in 1:n)num2[i]=pc[2]%*%X[i,2] 
> num3=rep(1:n) 
> for(i in 1:n)num3[i]=pc[3]%*%X[i,3] 
> num4=rep(1:n) 
> for(i in 1:n)num4[i]=pc[4]%*%X[i,4] 
> 
> den=rep(1:n) 
> for(i in 1:n)den[i]=pc%*%X[i,] 
> 
> 
> r1=num1/den 
> r2=num2/den 
> r3=num3/den 
> r4=num4/den 
> MLAV=sum(r2>r1 & r2>r3 & r2>r4) 
> MLAV 
> 
> Best regards, 
> ayu 
> 
> 
> -- 
> View this message in context: http://n4.nabble.com/How-to-repeat-for-function-
> tp1458806p1458806.html 
> Sent from the R help mailing list archive at Nabble.com. 
> 
> ______________________________________________ 
> [hidden email] mailing list 
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code. 

______________________________________________ 
[hidden email] mailing list 
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code. 


________________________________

View message @ 
http://n4.nabble.com/How-to-repeat-for-function-tp1458806p1458931.html 
To unsubscribe from How to repeat "for" function?, click here. 




-- 
View this message in context: 
http://n4.nabble.com/How-to-repeat-for-function-tp1458806p1459009.html
Sent from the R help mailing list archive at Nabble.com.

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to