selection of outputs from the function

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

selection of outputs from the function

ufuk beyaztas
This post was updated on .
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: selection of outputs from the function

David Winsemius

On Dec 24, 2010, at 11:56 AM, ufuk beyaztas wrote:

>
> Hi Dear All,
> This is a function which contains Covariance Ratio and Likelihood  
> Distance
> values (CVRi, LDi). i want to compute the all row's values, that is  
> run this
> function for nrow(X) times. The X and Y matrices are;
>
> X<-
> matrix(c(1125,920,835,1000,1150,990,840,650,640,583,570,570,510,555,460,275,510,165,244,79,232,268,271,237,192,202,184,200,180,165,151,171,243,147,286,198,196,210,327,334,7160,8804,8108,6370,6441,5154,5896,5336,5041,5012,4825,4391,4320,3709,3969,3558,4361,3301,2964,2777,85.9,86.5,85.2,83.8,82.1,79.2,81.2,80.6,78.4,79.3,78.7,78.0,72.3,74.9,74.4,72.5,57.7,71.8,72.5,71.9,8905,7388,5348,8056,6960,5690,6932,5400,3177,4461,3901,5002,4665,4642,4840,4479,4200,3410,3360,2599),nrow=20)
> Y<-
> matrix
> (c
> (1.5563,0.8976,0.7482,0.7160,0.3130,0.3617,0.1139,0.1139
> ,-0.2218
> ,-0.1549,0.0000,0.0000
> ,-0.0969
> ,-0.2218,-0.3979,-0.1549,-0.2218,-0.3979,-0.5229,-0.0458),nrow=20)
>
> theta <- function(X,Y) {
> B.cap <- solve(t(X)%*%X)%*%t(X)%*%Y
> P <- X%*%solve(t(X)%*%X)%*%t(X)
> Y.cap <- P%*%Y
> e <- Y-Y.cap
> var.cap<-(t(e)%*%e)/(nrow(X)-ncol(X)-1)
> ei <- Y[i,]-X[i,]%*%B.cap
> pi <- P[i,i]
> var.cap.i <-
> (((nrow(X)-ncol(X)-1)*var.cap)/(nrow(X)-ncol(X)-2))-(ei^2/((nrow(X)-
> ncol(X)-2)*(1-pi)))
> ti <- ei/(sqrt(var.cap)*sqrt(1-pi))
> ti.star <- ei/(sqrt(var.cap.i)*sqrt(1-pi))
>
> X.star <- cbind(X,Y)
> pi.star <- pi+(ei^2/(t(e)%*%e))
>
>
> LDi <-  nrow(X)*log(((nrow(X))/(nrow(X)-1))*(((nrow(X)-ncol(X)-2))/
> (ti.star^2+nrow(X)-ncol(X)-2)))+((ti.star^2*(nrow(X)-1))/((1-
> pi)*(nrow(X)-ncol(X)-2)))-1
> CVRi <- (((nrow(X)-ncol(X)-1-ti^2)/(nrow(X)-ncol(X)-2))^(nrow(X)))/
> (1-pi)
>
> list(ti=ti,ti.star=ti.star,pi=pi,pi.star=pi.star,LDi=LDi,CVRi=CVRi) }
>
> obj<-list()
> for(i in 1:nrow(X)){
> X<-X
> Y<-Y
> out<-theta(X,Y)
> obj<-c(obj,list(out))}
> obj
>
> Finally i get values...
> Is there any way to get the outputs as a list or data.frame like

Try this:

do.call(rbind, obj)

--
david.

>    pi CVRi
> 1   1    1
> 2   2    2
> 3   3    3
> 4   4    4
> 5   5    5
> 6   6    6
> 7   7    7
> 8   8    8
> 9   9    9
> 10 10   10
> 11 11   11
> 12 12   12
> 13 13   13
> 14 14   14
> 15 15   15
> 16 16   16
> 17 17   17
> 18 18   18
> 19 19   19
> 20 20   20
> for all values (pi,pi.star,ti,ti.star,CVRi,LDi)...
> Thanks so much for any idea !
> --
> View this message in context: http://r.789695.n4.nabble.com/selection-of-outputs-from-the-function-tp3163361p3163361.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.

David Winsemius, MD
West Hartford, CT

______________________________________________
[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.
Reply | Threaded
Open this post in threaded view
|

Re: selection of outputs from the function

David Winsemius

On Dec 24, 2010, at 12:58 PM, David Winsemius wrote:

>
> On Dec 24, 2010, at 11:56 AM, ufuk beyaztas wrote:
>
>>
>> Hi Dear All,
>> This is a function which contains Covariance Ratio and Likelihood  
>> Distance
>> values (CVRi, LDi). i want to compute the all row's values, that is  
>> run this
>> function for nrow(X) times. The X and Y matrices are;
>>
>> X<-
>> matrix
>> (c
>> (1125,920,835,1000,1150,990,840,650,640,583,570,570,510,555,460,275,510,165,244,79,232,26
snipped example data and code

>>
>>
>> list(ti=ti,ti.star=ti.star,pi=pi,pi.star=pi.star,LDi=LDi,CVRi=CVRi) }
>>
>> obj<-list()
>> for(i in 1:nrow(X)){
>> X<-X
>> Y<-Y
>> out<-theta(X,Y)
>> obj<-c(obj,list(out))}
>> obj
>>
>> Finally i get values...
>> Is there any way to get the outputs as a list or data.frame like
>
> Try this:
>
> do.call(rbind, obj)

If you wanted a dataframe you could also use

do.call(rbind.data.frame, obj)

--
David.

>
> --
> david.
>>   pi CVRi
>> 1   1    1
>> 2   2    2
>> 3   3    3
>> 4   4    4
>> 5   5    5
>> 6   6    6
>> 7   7    7
>> 8   8    8
>> 9   9    9
>> 10 10   10
>> 11 11   11
>> 12 12   12
>> 13 13   13
>> 14 14   14
>> 15 15   15
>> 16 16   16
>> 17 17   17
>> 18 18   18
>> 19 19   19
>> 20 20   20
>> for all values (pi,pi.star,ti,ti.star,CVRi,LDi)...
>> Thanks so much for any idea !
>> --
>> View this message in context: http://r.789695.n4.nabble.com/selection-of-outputs-from-the-function-tp3163361p3163361.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.
>
> David Winsemius, MD
> West Hartford, CT
>
> ______________________________________________
> [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.

David Winsemius, MD
West Hartford, CT

______________________________________________
[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.
Reply | Threaded
Open this post in threaded view
|

Re: selection of outputs from the function

Joshua Wiley-2
In reply to this post by ufuk beyaztas
Hi,

Another option is to vectorize your function and have the theta()
function return the data frame.  On my system, this approach was
roughly 10x faster than using your original function + for loop and
gave identical results.  I also made a few other minor changes to your
code to make it easier for me to understand.  The only real changes
are:

ei <- as.vector(Y - X %*% B.cap)
my.pi <- diag(P)
data.frame(ti = ti, ti.star = ti.star, pi = my.pi,
    pi.star = pi.star, LDi = LDi, CVRi = CVRi)

## instead of

ei <- Y[i, ] - X[i, ] %*% B.cap
pi <- P[i, i]
list(ti = ti, ti.star = ti.star, pi = my.pi,
    pi.star = pi.star, LDi = LDi, CVRi = CVRi)

Hope that helps,

Josh

#### Updated theta function ####
theta2 <- function(X, Y) {
  B.cap <- solve(crossprod(X)) %*% crossprod(X, Y)
  P <- X %*% solve(crossprod(X)) %*% t(X)
  Y.cap <- P %*% Y
  e <- Y - Y.cap
  dX <- nrow(X) - ncol(X)
  var.cap <- crossprod(e) / (dX - 1)
  ei <- as.vector(Y - X %*% B.cap)
  my.pi <- diag(P)
  var.cap.i <- (((dX - 1) * var.cap)/(dX - 2)) -
    (ei^2/((dX - 2) * (1 - my.pi)))

  ti <- ei / sqrt(var.cap * (1 - my.pi))
  ti.star <- ei / sqrt(var.cap.i * (1 - my.pi))
  pi.star <- my.pi + ei^2 / crossprod(e)

  LDi <- nrow(X) *
    log((nrow(X)/(nrow(X) - 1)) * ((dX - 2)/(ti.star^2 + dX - 2))) +
    ((ti.star^2 * (nrow(X) - 1)) / ((1 - my.pi) * (dX - 2))) - 1

  CVRi <- (((dX - 1 - ti^2)/(dX - 2))^nrow(X)) / (1 - my.pi)

  output <- data.frame(ti = ti, ti.star = ti.star, pi = my.pi,
    pi.star = pi.star, LDi = LDi, CVRi = CVRi)

  return(output)
}

On Fri, Dec 24, 2010 at 8:56 AM, ufuk beyaztas <[hidden email]> wrote:

>
> Hi Dear All,
> This is a function which contains Covariance Ratio and Likelihood Distance
> values (CVRi, LDi). i want to compute the all row's values, that is run this
> function for nrow(X) times. The X and Y matrices are;
>
> X<-matrix(c(1125,920,835,1000,1150,990,840,650,640,583,570,570,510,555,460,275,510,165,244,79,232,268,271,237,192,202,184,200,180,165,151,171,243,147,286,198,196,210,327,334,7160,8804,8108,6370,6441,5154,5896,5336,5041,5012,4825,4391,4320,3709,3969,3558,4361,3301,2964,2777,85.9,86.5,85.2,83.8,82.1,79.2,81.2,80.6,78.4,79.3,78.7,78.0,72.3,74.9,74.4,72.5,57.7,71.8,72.5,71.9,8905,7388,5348,8056,6960,5690,6932,5400,3177,4461,3901,5002,4665,4642,4840,4479,4200,3410,3360,2599),nrow=20)
> Y<-matrix(c(1.5563,0.8976,0.7482,0.7160,0.3130,0.3617,0.1139,0.1139,-0.2218,-0.1549,0.0000,0.0000,-0.0969,-0.2218,-0.3979,-0.1549,-0.2218,-0.3979,-0.5229,-0.0458),nrow=20)
>
> theta <- function(X,Y) {
> B.cap <- solve(t(X)%*%X)%*%t(X)%*%Y
> P <- X%*%solve(t(X)%*%X)%*%t(X)
> Y.cap <- P%*%Y
> e <- Y-Y.cap
> var.cap<-(t(e)%*%e)/(nrow(X)-ncol(X)-1)
> ei <- Y[i,]-X[i,]%*%B.cap
> pi <- P[i,i]
> var.cap.i <-
> (((nrow(X)-ncol(X)-1)*var.cap)/(nrow(X)-ncol(X)-2))-(ei^2/((nrow(X)-ncol(X)-2)*(1-pi)))
> ti <- ei/(sqrt(var.cap)*sqrt(1-pi))
> ti.star <- ei/(sqrt(var.cap.i)*sqrt(1-pi))
>
> X.star <- cbind(X,Y)
> pi.star <- pi+(ei^2/(t(e)%*%e))
>
>
> LDi <-  nrow(X)*log(((nrow(X))/(nrow(X)-1))*(((nrow(X)-ncol(X)-2))/
> (ti.star^2+nrow(X)-ncol(X)-2)))+((ti.star^2*(nrow(X)-1))/((1-pi)*(nrow(X)-ncol(X)-2)))-1
> CVRi <- (((nrow(X)-ncol(X)-1-ti^2)/(nrow(X)-ncol(X)-2))^(nrow(X)))/(1-pi)
>
> list(ti=ti,ti.star=ti.star,pi=pi,pi.star=pi.star,LDi=LDi,CVRi=CVRi) }
>
> obj<-list()
> for(i in 1:nrow(X)){
> X<-X
> Y<-Y
> out<-theta(X,Y)
> obj<-c(obj,list(out))}
> obj
>
> Finally i get values...
> Is there any way to get the outputs as a list or data.frame like
>    pi CVRi
> 1   1    1
> 2   2    2
> 3   3    3
> 4   4    4
> 5   5    5
> 6   6    6
> 7   7    7
> 8   8    8
> 9   9    9
> 10 10   10
> 11 11   11
> 12 12   12
> 13 13   13
> 14 14   14
> 15 15   15
> 16 16   16
> 17 17   17
> 18 18   18
> 19 19   19
> 20 20   20
> for all values (pi,pi.star,ti,ti.star,CVRi,LDi)...
> Thanks so much for any idea !
> --
> View this message in context: http://r.789695.n4.nabble.com/selection-of-outputs-from-the-function-tp3163361p3163361.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.
>



--
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.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.