Solved the problem: I guess I was still using the main version of zoo. Thanks again! -- View this message in context: http://r.789695.n4.nabble.com/Yearly-aggregates-and-matrices-tp3438140p3441723.html Sent from the R help mailing list archive at Nabble.com.
Yearly aggregates and matrices
4 messages · mathijsdevaan, Gabor Grothendieck
8 days later
As a follow up on this post, I am trying to slightly adjust the solution
kindly provided by Gabor. However, I am getting some results that I do not
understand. Example:
# devel version of zoo
install.packages("zoo", repos = "http://r-forge.r-project.org")
library(zoo)
DF1 = data.frame(read.table(textConnection(" B C D E F G
8025 1995 0 4 1 2
8025 1997 1 1 3 4
8026 1995 0 7 0 0
8026 1996 1 2 3 0
8026 1997 1 2 3 1
8026 1998 6 0 0 4
8026 1999 3 7 0 3
8027 1997 1 2 3 9
8027 1998 1 2 3 1
8027 1999 6 0 0 2
8028 1999 3 7 0 0
8029 1995 0 2 3 3
8029 1998 1 2 3 2
8029 1999 6 0 0 1"),head=TRUE,stringsAsFactors=FALSE))
a <- read.zoo(DF1, split = 1, index = 2, FUN = identity)
sum.na <- function(x) if (any(!is.na(x))) sum(x, na.rm = TRUE) else NA
b <- rollapply(a, 3, sum.na, align = "right", partial = TRUE)
newDF <- lapply(1:nrow(b), function(i)
prop.table(na.omit(matrix(b[i,], nc = 4, byrow = TRUE,
dimnames = list(unique(DF1$B), names(DF1)[-1:-2]))), 1))
names(newDF) <- time(a)
c<-lapply(newDF, function(mat) tcrossprod(mat / sqrt(rowSums(mat^2))))
Now I would like the elements e in c to be equal to 1-e. However,
c<-lapply(newDF, function(mat) 1 - tcrossprod(mat / sqrt(rowSums(mat^2))))
gives a value of 2.220446e-16 for as.data.frame(c['1999'])[2,2] instead of
0
What am I doing wrong here? Thanks a lot!
First we use read.zoo to reform DF into a multivariate time series and
use rollapply (where we have used the devel version of zoo since it
supports the partial= argument on rollapply). We then reform each
resulting row into a matrix converting each row of each matrix to
proportions. Finally we form the desired scaled cross product.
# devel version of zoo
install.packages("zoo", repos = "http://r-forge.r-project.org")
library(zoo)
z <- read.zoo(DF, split = 2, index = 3, FUN = identity)
sum.na <- function(x) if (any(!is.na(x))) sum(x, na.rm = TRUE) else NA
r <- rollapply(z, 3, sum.na, align = "right", partial = TRUE)
newDF <- lapply(1:nrow(r), function(i)
prop.table(na.omit(matrix(r[i,], nc = 4, byrow = TRUE,
dimnames = list(unique(DF$B), names(DF)[-2:-3]))[, -1]),
1))
names(newDF) <- time(z)
lapply(newDF, function(mat) tcrossprod(mat / sqrt(rowSums(mat^2))))
-- View this message in context: http://r.789695.n4.nabble.com/Yearly-aggregates-and-matrices-tp3438140p3462564.html Sent from the R help mailing list archive at Nabble.com.
On Wed, Apr 20, 2011 at 5:49 AM, mathijsdevaan <mathijsdevaan at gmail.com> wrote:
As a follow up on this post, I am trying to slightly adjust the solution
kindly provided by Gabor. However, I am getting some results that I do not
understand. Example:
# devel version of zoo
install.packages("zoo", repos = "http://r-forge.r-project.org")
library(zoo)
DF1 = data.frame(read.table(textConnection(" ? ?B ?C ?D ?E ?F ?G
8025 ?1995 ?0 ?4 ?1 ?2
8025 ?1997 ?1 ?1 ?3 ?4
8026 ?1995 ?0 ?7 ?0 ?0
8026 ?1996 ?1 ?2 ?3 ?0
8026 ?1997 ?1 ?2 ?3 ?1
8026 ?1998 ?6 ?0 ?0 ?4
8026 ?1999 ?3 ?7 ?0 ?3
8027 ?1997 ?1 ?2 ?3 ?9
8027 ?1998 ?1 ?2 ?3 ?1
8027 ?1999 ?6 ?0 ?0 ?2
8028 ?1999 ?3 ?7 ?0 ?0
8029 ?1995 ?0 ?2 ?3 ?3
8029 ?1998 ?1 ?2 ?3 ?2
8029 ?1999 ?6 ?0 ?0 ?1"),head=TRUE,stringsAsFactors=FALSE))
a <- read.zoo(DF1, split = 1, index = 2, FUN = identity)
sum.na <- function(x) if (any(!is.na(x))) sum(x, na.rm = TRUE) else NA
b <- rollapply(a, 3, ?sum.na, align = "right", partial = TRUE)
newDF <- lapply(1:nrow(b), function(i)
? ? ? prop.table(na.omit(matrix(b[i,], nc = 4, byrow = TRUE,
? ? ? ? ? ? ? dimnames = list(unique(DF1$B), names(DF1)[-1:-2]))), 1))
names(newDF) <- time(a)
c<-lapply(newDF, function(mat) tcrossprod(mat / sqrt(rowSums(mat^2))))
Now I would like the elements e in c to be equal to 1-e. However,
c<-lapply(newDF, function(mat) 1 - tcrossprod(mat / sqrt(rowSums(mat^2))))
gives a value ?of 2.220446e-16 for as.data.frame(c['1999'])[2,2] instead of
0
What am I doing wrong here? Thanks a lot!
See FAQ 7.31 at: http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f
Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
Thanks for clarifying that. Best
Gabor Grothendieck wrote:
On Wed, Apr 20, 2011 at 5:49 AM, mathijsdevaan <mathijsdevaan at gmail.com> wrote:
As a follow up on this post, I am trying to slightly adjust the solution
kindly provided by Gabor. However, I am getting some results that I do
not
understand. Example:
# devel version of zoo
install.packages("zoo", repos = "http://r-forge.r-project.org")
library(zoo)
DF1 = data.frame(read.table(textConnection(" ? ?B ?C ?D ?E ?F ?G
8025 ?1995 ?0 ?4 ?1 ?2
8025 ?1997 ?1 ?1 ?3 ?4
8026 ?1995 ?0 ?7 ?0 ?0
8026 ?1996 ?1 ?2 ?3 ?0
8026 ?1997 ?1 ?2 ?3 ?1
8026 ?1998 ?6 ?0 ?0 ?4
8026 ?1999 ?3 ?7 ?0 ?3
8027 ?1997 ?1 ?2 ?3 ?9
8027 ?1998 ?1 ?2 ?3 ?1
8027 ?1999 ?6 ?0 ?0 ?2
8028 ?1999 ?3 ?7 ?0 ?0
8029 ?1995 ?0 ?2 ?3 ?3
8029 ?1998 ?1 ?2 ?3 ?2
8029 ?1999 ?6 ?0 ?0 ?1"),head=TRUE,stringsAsFactors=FALSE))
a <- read.zoo(DF1, split = 1, index = 2, FUN = identity)
sum.na <- function(x) if (any(!is.na(x))) sum(x, na.rm = TRUE) else NA
b <- rollapply(a, 3, ?sum.na, align = "right", partial = TRUE)
newDF <- lapply(1:nrow(b), function(i)
? ? ? prop.table(na.omit(matrix(b[i,], nc = 4, byrow = TRUE,
? ? ? ? ? ? ? dimnames = list(unique(DF1$B), names(DF1)[-1:-2]))), 1))
names(newDF) <- time(a)
c<-lapply(newDF, function(mat) tcrossprod(mat / sqrt(rowSums(mat^2))))
Now I would like the elements e in c to be equal to 1-e. However,
c<-lapply(newDF, function(mat) 1 - tcrossprod(mat /
sqrt(rowSums(mat^2))))
gives a value ?of 2.220446e-16 for as.data.frame(c['1999'])[2,2] instead
of
0
What am I doing wrong here? Thanks a lot!
See FAQ 7.31 at: http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
______________________________________________ R-help at 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.
-- View this message in context: http://r.789695.n4.nabble.com/Yearly-aggregates-and-matrices-tp3438140p3463000.html Sent from the R help mailing list archive at Nabble.com.