Hi,
I guess you wanted something like this:

res2 <- do.call(cbind,lapply(lst2,
 function(x)
rollapply(x,width=32,FUN=function(z) {z1 <- as.data.frame(z); 
if(!sum(!!rowSums(is.na(z1)))) {l1 <-lm(r~F.1+F.2+F.3,data=z1); 
c(coef(l1), pval=summary(l1)$coef[,4], rsquare=summary(l1)$r.squared) } 
else rep(NA,9)},by.column=FALSE,align="right")))
dim(res2)
#[1]  123 3006
 334*9
#[1] 3006

lst2New <- lapply(split(seq(3006),((seq(3006)-1)%%9)+1),function(x) {x1 <- 
res2[,x]; colnames(x1) <- paste(colnames(x1),1:334,sep="_");x1})
sapply(lst2New,ncol)
#  1   2   3   4   5   6   7   8   9 
#334 334 334 334 334 334 334 334 334 
lst2New[[1]][1:4,1:4]
#     (Intercept)_1 (Intercept)_2 (Intercept)_3 (Intercept)_4
#[1,]            NA    -0.3295765    -0.7025259            NA
#[2,]            NA     0.1217360    -1.5221660            NA
#[3,]            NA     0.3192466    -1.3586341            NA
#[4,]            NA     0.2618476    -0.9698798            NA


A.K.














On Sunday, December 1, 2013 9:33 PM, nooldor <nool...@gmail.com> wrote:

Hi,

actually, do you remember yesterday code you build for me?
it was:

dat1<-read.csv("Book2.csv", header=T)
>###same as previous
>
>
>lst1 <- lapply(paste("r",1:334,sep="."),function(x) 
>cbind(dat1[,c(1:3)],dat1[x]))
>lst2 <- lapply(lst1,function(x) {colnames(x)[4] <-"r";x} )
> sapply(lst2,function(x) sum(!!rowSums(is.na(x))))
>library(zoo)
>res1 <- do.call(rbind,lapply(lst2,
>function(x) rollapply(x,width=32,FUN=function(z) {z1 <- as.data.frame(z); 
>if(!sum(!!rowSums(is.na(z1)))) {l1 <-lm(r~F.1+F.2+F.3,data=z1); c(coef(l1), 
pval=summary(l1)$coef[,4], rsquare=summary(l1)$r.squared) } else 
rep(NA,9)},by.column=FALSE,align="right")))
>row.names(res1) <- rep(paste("r",1:334,sep="."),each=123)
> dim(res1)
>#[1] 41082     9

(boo2.xls is  attached in this e-mail previously, just need to open it in excel 
and save as csv)
then we have result res1 as matrix 41082 x 9
(this 41082 = 123observations in time x 334objects)
now I need to separate this matrix res1 into 9 different matrices each one 
containing 123 obs x 334 variables 



maybe reshape() would be useful ...

... let me know if I described it clearly 





On 2 December 2013 03:17, arun <smartpink...@yahoo.com> wrote:

#or
>
>data.frame(split(dat1,dat1$A))
>
>
>
>
>
>On Sunday, December 1, 2013 9:16 PM, arun <smartpink...@yahoo.com> wrote:
>Hi,
>Try:
>dat1 <- read.table(text="A    B     C     D
>r.1  x1    x2   x3
>r.1  x4    x5    x6
>r.2  x7    x8    x9
>r.2  x10  x11 x12
>r.3  x13  x14 x15
>r.3  x16  x17 x18",header=TRUE,stringsAsFactors=FALSE)
>
> dat2 <- do.call(cbind,split(dat1,dat1$A))
>colnames(dat2) <- gsub(".*\\.","",colnames(dat2))
>A.K.
>
>
>
>
>
>
>
>On Sunday, December 1, 2013 6:32 PM, nooldor <nool...@gmail.com> wrote:
>
>Hi,
>
>could you also tell me how to reshape the res1 matrix like that:
>
>[now]
>
>A    B     C     D
>r.1  x1    x2   x3
>r.1  x4    x5    x6
>r.2  x7    x8    x9r.2  x10  x11 x12r.3  x13  x14 x15r.3  x16  x17 x18
>
>
>[after]:
>A    B     C     D      A    B     C     D       A    B     C     D
>r.1  x1    x2   x3      r.2  x7    x8    x9      r.3  x13  x14 x15
>r.1  x4    x5   x6      r.2  x10  x11 x12      r.3  x16  x17 x18
>
>
>
>big thanks!
>
>
>
>
>
>
>
>On 30 November 2013 23:28, arun <smartpink...@yahoo.com> wrote:
>
>Hi,
>>No problem.
>>
>>In that case, each column will be a list.  For example if I take the first 
>>element of `lst2`
>>dW1 <- rollapply(lst2[[1]],width=32,FUN=function(z) {z1 <- as.data.frame(z); 
>>if(!sum(!!rowSums(is.na(z1)))) {l1 <-lm(r~F.1+F.2+F.3,data=z1); 
>>durbinWatsonTest(l1,max.lag=3) } else 
>>rep(NA,4)},by.column=FALSE,align="right")
>>
>> tail(dW1[,1],1)
>>#[[1]]
>>#[1] -0.3602936  0.1975667 -0.1740797
>>
>>
>>You can store it by:
>>resdW1 <- do.call(cbind,lapply(seq_len(ncol(dW1)),function(i) 
>>do.call(rbind,dW1[,i]))[1:3])
>>
>>
>>Similarly, for more than one elements (using a subset of lst2- as it takes 
>>time)
>>
>>
>>lst3 <- lapply(lst2[1:2],function(x) rollapply(x,width=32,FUN=function(z) {z1 
>><- as.data.frame(z); if(!sum(!!rowSums(is.na(z1)))) {l1 
>><-lm(r~F.1+F.2+F.3,data=z1); durbinWatsonTest(l1,max.lag=3) } else 
>>rep(NA,4)},by.column=FALSE,align="right"))
>>
>>lst3New <- lapply(lst3,function(x) 
>>do.call(cbind,lapply(seq_len(ncol(x)),function(i) do.call(rbind,x[,i]))[1:3]))
>>
>>lst3New <- lapply(lst3New, function(x) {colnames(x) <- 
>>paste0(rep(c("r","dw","p"),each=3),1:3); x})
>>
>>A.K.
>>
>>
>>On Saturday, November 30, 2013 5:03 PM, nooldor <nool...@gmail.com> wrote:
>>
>>Hey!
>>
>>
>>Yes,
>>only the D-W test takes so much time, did not check it yet
>>
>>I checked results (estimates) with manually run regressions (in excel) and 
>>they are correct.
>>
>>
>>I only change the "width" to 31 and "each=123" to 124, cause it should be 
>>((154-31)+1) x 334 = 41416 matrix
>>
>>
>>with the lag in D-W test I was wondering how to have table when I use 
>>durbinWatsonTest(l1,3) - with three lags instead of default 1.
>>
>>but I can manage it - just need to learn about functions used by you.
>>
>>
>>Any way: BIG THANK to you!
>>
>>
>>Best wishes,
>>T.S.
>>
>>
>>
>>
>>
>>On 30 November 2013 21:12, arun <smartpink...@yahoo.com> wrote:
>>
>>Hi,
>>>
>>>I was able to read the file after saving it as .csv.  It seems to work 
>>>without any errors.
>>>
>>>dat1<-read.csv("Book2.csv", header=T)
>>>###same as previous
>>>
>>>
>>>lst1 <- lapply(paste("r",1:334,sep="."),function(x) 
>>>cbind(dat1[,c(1:3)],dat1[x]))
>>>lst2 <- lapply(lst1,function(x) {colnames(x)[4] <-"r";x} )
>>> sapply(lst2,function(x) sum(!!rowSums(is.na(x))))
>>>library(zoo)
>>>
>>>res1 <- do.call(rbind,lapply(lst2,function(x) 
>>>rollapply(x,width=32,FUN=function(z) {z1 <- as.data.frame(z); 
>>>if(!sum(!!rowSums(is.na(z1)))) {l1 <-lm(r~F.1+F.2+F.3,data=z1); c(coef(l1), 
>>>pval=summary(l1)$coef[,4], rsquare=summary(l1)$r.squared) } else 
>>>rep(NA,9)},by.column=FALSE,align="right")))
>>>row.names(res1) <- rep(paste("r",1:334,sep="."),each=123)
>>> dim(res1)
>>>#[1] 41082     9
>>>
>>>#vif
>>> library(car)
>>>
>>>res2 <- do.call(rbind,lapply(lst2,function(x) 
>>>rollapply(x,width=32,FUN=function(z) {z1 <- as.data.frame(z); 
>>>if(!sum(!!rowSums(is.na(z1)))) {l1 <-lm(r~F.1+F.2+F.3,data=z1); vif(l1) } 
>>>else rep(NA,3)},by.column=FALSE,align="right")))
>>>row.names(res2) <- rep(paste("r",1:334,sep="."),each=123)
>>>dim(res2)
>>>#[1] 41082     3
>>>
>>>#DW statistic:
>>> lst3 <- lapply(lst2,function(x) rollapply(x,width=32,FUN=function(z) {z1 <- 
>>>as.data.frame(z); if(!sum(!!rowSums(is.na(z1)))) {l1 
>>><-lm(r~F.1+F.2+F.3,data=z1); durbinWatsonTest(l1) } else 
>>>rep(NA,4)},by.column=FALSE,align="right"))
>>> res3 <- do.call(rbind,lapply(lst3,function(x) x[,-4]))
>>>row.names(res3) <- rep(paste("r",1:334,sep="."),each=123)
>>> dim(res3)
>>>#[1] 41082     3
>>>##ncvTest()
>>>f4 <- function(meanmod, dta, varmod) {
>>>assign(".dta", dta, envir=.GlobalEnv)
>>>assign(".meanmod", meanmod, envir=.GlobalEnv)
>>>m1 <- lm(.meanmod, .dta)
>>>ans <- ncvTest(m1, varmod)
>>>remove(".dta", envir=.GlobalEnv)
>>>remove(".meanmod", envir=.GlobalEnv)
>>>ans
>>>}
>>>
>>> lst4 <- lapply(lst2,function(x) rollapply(x,width=32,FUN=function(z) {z1 <- 
>>>as.data.frame(z); if(!sum(!!rowSums(is.na(z1)))) {l1 <-f4(r~.,z1) } else 
>>>NA},by.column=FALSE,align="right"))
>>>names(lst4) <- paste("r",1:334,sep=".")
>>>length(lst4)
>>>#[1] 334
>>>
>>>
>>>###jarque.bera.test
>>>library(tseries)
>>>res5 <- do.call(rbind,lapply(lst2,function(x) 
>>>rollapply(x,width=32,FUN=function(z) {z1 <- as.data.frame(z); 
>>>if(!sum(!!rowSums(is.na(z1)))) {l1 <-lm(r~F.1+F.2+F.3,data=z1); resid <- 
>>>residuals(l1); unlist(jarque.bera.test(resid)[1:3]) } else 
>>>rep(NA,3)},by.column=FALSE,align="right")))
>>> dim(res5)
>>>#[1] 41082     3
>>>
>>>A.K.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>On Saturday, November 30, 2013 1:44 PM, nooldor <nool...@gmail.com> wrote:
>>>
>>>here is in .xlsx should be easy to open and eventually find&replace commas 
>>>according to you excel settings (or maybe it will do it automatically)
>>>
>>>
>>>
>>>
>>>
>>>
>>>On 30 November 2013 19:15, arun <smartpink...@yahoo.com> wrote:
>>>
>>>I tried that, but:
>>>>
>>>>
>>>>
>>>>dat1<-read.table("Book2.csv", head=T, sep=";", dec=",")
>>>>> str(dat1)
>>>>'data.frame':    154 obs. of  1 variable:
>>>>
>>>>Then I changed to:
>>>>dat1<-read.table("Book2.csv", head=T, sep="\t", dec=",")
>>>>> str(dat1)
>>>>'data.frame':    154 obs. of  661 variables:
>>>>Both of them are wrong as the number of variables should be 337.
>>>>A.K.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>On Saturday, November 30, 2013 12:53 PM, nooldor <nool...@gmail.com> wrote:
>>>>
>>>>Thank you,
>>>>
>>>>I got your reply. I am just testing your script. I will let you know how is 
>>>>it soon.
>>>>
>>>>.csv could be problematic as commas are used as dec separator (Eastern 
>>>>Europe excel settings) ... I read it in R with this:
>>>>dat1<-read.table("Book2.csv", head=T, sep=";", dec=",")
>>>>
>>>>Thank you very much !!!
>>>>
>>>>T.S.
>>>>
>>>>
>>>>
>>>>
>>>>On 30 November 2013 18:39, arun <smartpink...@yahoo.com> wrote:
>>>>
>>>>I couldn't read the "Book.csv" as the format is completely messed up.  
>>>>Anyway, I hope the solution works on your dataset.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>On Saturday, November 30, 2013 10:34 AM, nooldor <nool...@gmail.com> wrote:
>>>>>
>>>>>
>>>>>ok.
>>>>>
>>>>>
>>>>>> dat1<-read.table("Book2.csv", head=T, sep=";", dec=",") > colnames(dat1) 
>>>>>> <- c(paste("F",1:3,sep="."),paste("r",1:2,sep=".")) > lst1 <- 
>>>>>> lapply(paste("r",1:2,sep="."),function(x) cbind(dat1[,c(1:3)],dat1[x])) 
>>>>>> > lst2 <- lapply(lst1,function(x) {colnames(x)[4] <-"r";x} ) > 
>>>>>> sum(!!rowSums(is.na(lst2[[1]]))) [1] 57 > #[1] 40 > 
>>>>>> sapply(lst2,function(x) sum(!!rowSums(is.na(x)))) [1] 57  0 > #[1] 40 46
>>>>>in att you have the data file
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>On 30 November 2013 16:22, arun <smartpink...@yahoo.com> wrote:
>>>>>
>>>>>Hi,
>>>>>>The first point is not that clear.
>>>>>>
>>>>>>Could you show the expected results in this case?
>>>>>>
>>>>>>set.seed(432)
>>>>>>dat1 <- 
>>>>>>as.data.frame(matrix(sample(c(1:10,NA),154*5,replace=TRUE),ncol=5))
>>>>>> colnames(dat1) <- c(paste("F",1:3,sep="."),paste("r",1:2,sep="."))
>>>>>>lst1 <- lapply(paste("r",1:2,sep="."),function(x) 
>>>>>>cbind(dat1[,c(1:3)],dat1[x]))
>>>>>>
>>>>>>
>>>>>> lst2 <- lapply(lst1,function(x) {colnames(x)[4] <-"r";x} )
>>>>>> sum(!!rowSums(is.na(lst2[[1]])))
>>>>>>#[1] 40
>>>>>> sapply(lst2,function(x) sum(!!rowSums(is.na(x))))
>>>>>>#[1] 40 46
>>>>>>
>>>>>>
>>>>>>A.K.
>>>>>>
>>>>>>
>>>>>>
>>>>>>On Saturday, November 30, 2013 10:09 AM, nooldor <nool...@gmail.com> 
>>>>>>wrote:
>>>>>>
>>>>>>Hi,
>>>>>>
>>>>>>Thanks for reply!
>>>>>>
>>>>>>
>>>>>>Three things:
>>>>>>1.
>>>>>>I did not write that some of the data has more then 31 NA in the column 
>>>>>>and then it is not possible to run lm()
>>>>>>
>>>>>>Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :  
>>>>>>0 (non-NA) casesIn this case program should return "NA" symbol and go 
>>>>>>further, in the case when length of the observations is shorter then 31 
>>>>>>program should always return "NA" but go further .
>>>>>>
>>>>>>
>>>>>>
>>>>>>2. in your result matrix there are only 4 columns (for estimates of the 
>>>>>>coefficients), is it possible to put there 4 more columns with p-values 
>>>>>>and one column with R squared
>>>>>>
>>>>>>
>>>>>>3. basic statistical test for the regressions:
>>>>>>
>>>>>>inflation factors can be captured by:
>>>>>>res2 <- do.call(rbind,lapply(lst2,function(x) 
>>>>>>rollapply(x,width=32,FUN=function(z)
>>>>>>  vif(lm(r~ 
>>>>>>F.1+F.2+F.3,data=as.data.frame(z))),by.column=FALSE,align="right")))
>>>>>>
>>>>>>and DW statistic:
>>>>>>res3 <- do.call(rbind,lapply(lst2,function(x) 
>>>>>>rollapply(x,width=32,FUN=function(z)
>>>>>>  durbinWatsonTest(lm(r~ 
>>>>>>F.1+F.2+F.3,data=as.data.frame(z))),by.column=FALSE,align="right")))
>>>>>>
>>>>>>
>>>>>>3a)is that right?
>>>>>>
>>>>>>3b) how to do and have in user-friendly form durbinWatsonTest for more 
>>>>>>then 1 lag?
>>>>>>
>>>>>>3c) how to apply: jarque.bera.test from library(tseries) and ncvTest from 
>>>>>>library(car) ???
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>Pozdrowienia,
>>>>>>
>>>>>>Tomasz Schabek
>>>>>>
>>>>>>
>>>>>>On 30 November 2013 07:42, arun <smartpink...@yahoo.com> wrote:
>>>>>>
>>>>>>Hi,
>>>>>>>The link seems to be not working.  From the description, it looks like:
>>>>>>>set.seed(432)
>>>>>>>dat1 <- as.data.frame(matrix(sample(200,154*337,replace=TRUE),ncol=337))
>>>>>>> colnames(dat1) <- c(paste("F",1:3,sep="."),paste("r",1:334,sep="."))
>>>>>>>lst1 <- lapply(paste("r",1:334,sep="."),function(x) 
>>>>>>>cbind(dat1[,c(1:3)],dat1[x]))
>>>>>>>
>>>>>>> lst2 <- lapply(lst1,function(x) {colnames(x)[4] <-"r";x} )
>>>>>>>library(zoo)
>>>>>>>
>>>>>>>res <- do.call(rbind,lapply(lst2,function(x) 
>>>>>>>rollapply(x,width=32,FUN=function(z) coef(lm(r~ 
>>>>>>>F.1+F.2+F.3,data=as.data.frame(z))),by.column=FALSE,align="right")))
>>>>>>>
>>>>>>>row.names(res) <- rep(paste("r",1:334,sep="."),each=123)
>>>>>>> dim(res)
>>>>>>>#[1] 41082     4
>>>>>>>
>>>>>>>coef(lm(r.1~F.1+F.2+F.3,data=dat1[1:32,]) )
>>>>>>>#(Intercept)         F.1         F.2         F.3
>>>>>>>#109.9168150  -0.1705361  -0.1028231   0.2027911
>>>>>>>coef(lm(r.1~F.1+F.2+F.3,data=dat1[2:33,]) )
>>>>>>>#(Intercept)         F.1         F.2         F.3
>>>>>>>#119.3718949  -0.1660709  -0.2059830   0.1338608
>>>>>>>res[1:2,]
>>>>>>>#    (Intercept)        F.1        F.2       F.3
>>>>>>>#r.1    109.9168 -0.1705361 -0.1028231 0.2027911
>>>>>>>#r.1    119.3719 -0.1660709 -0.2059830 0.1338608
>>>>>>>
>>>>>>>A.K.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>On Friday, November 29, 2013 6:43 PM, nooldor <nool...@gmail.com> wrote:
>>>>>>>Hi all!
>>>>>>>
>>>>>>>
>>>>>>>I am just starting my adventure with R, so excuse me naive questions.
>>>>>>>
>>>>>>>My data look like that:
>>>>>>>
>>>>>>><http://r.789695.n4.nabble.com/file/n4681391/data_descr_img.jpg>
>>>>>>>
>>>>>>>I have 3 independent variables (F.1, F.2 and F.3) and 334 other variables
>>>>>>>(r.1, r.2, ... r.334) - each one of these will be dependent variable in 
>>>>>>>my
>>>>>>>regression.
>>>>>>>
>>>>>>>Total span of the time is 154 observations. But I would like to have 
>>>>>>>rolling
>>>>>>>window regression with length of 31 observations.
>>>>>>>
>>>>>>>I would like to run script like that:
>>>>>>>
>>>>>>>summary(lm(r.1~F.1+F.2+F.3, data=data))
>>>>>>>vif(lm(r.1~F.1+F.2+F.3, data=data))
>>>>>>>
>>>>>>>But for each of 334 (r.1 to r.334) dependent variables separately and 
>>>>>>>with
>>>>>>>rolling-window of the length 31obs.
>>>>>>>
>>>>>>>Id est:
>>>>>>>summary(lm(r.1~F.1+F.2+F.3, data=data)) would be run 123 (154 total obs -
>>>>>>>31. for the first regression) times for rolling-fixed period of 31 obs.
>>>>>>>
>>>>>>>The next regression would be:
>>>>>>>summary(lm(r.2~F.1+F.2+F.3, data=data)) also 123 times ... and so on till
>>>>>>>summary(lm(r.334~F.1+F.2+F.3, data=data))
>>>>>>>
>>>>>>>It means it would be 123 x 334 regressions (=41082 regressions)
>>>>>>>
>>>>>>>I would like to save results (summary + vif test) of all those 41082
>>>>>>>regressions in one read-user-friendly file like this given by e.g command
>>>>>>>capture.output()
>>>>>>>
>>>>>>>Could you help with it?
>>>>>>>
>>>>>>>Regards,
>>>>>>>
>>>>>>>T.S.
>>>>>>>
>>>>>>>    [[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.
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

______________________________________________
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