[R] Running different Regressions using for loops

Rui Barradas ruipbarradas at sapo.pt
Fri Sep 28 13:19:12 CEST 2012


Ok, if I'm understanding it well, you want the mean value of Price1,   , 
Price5? I don't know if it makes any sense, the coefficients already are 
mean values, but see if this is it.

price.coef <- sapply(lm.list, function(x) coef(x)[2])
mean(price.coef)

Rui Barradas
Em 28-09-2012 12:07, Krunal Nanavati escreveu:
> Hi,
>
> Yes the thing that you provided...works fine....but probably I should have
> asked for some other thing.
>
> Here is what I am trying to do....
>
> I am trying to get the mean of Price variable....so I am entering the
> below function:
>
>           mean(names(lm.list2[[2]]$coefficient[2] ))
>
> but this gives me an error....
>
> 	[1] NA
> 	Warning message:
> 	In mean.default(names(lm.list2[[2]]$coefficient[2])) :
>    	argument is not numeric or logical: returning NA
>
> I thought by getting the text from the list variable...will help me
> generate the mean for that text...which is a variable in the data...say
> Price 1, Media 2....and so on
>
> Is this a proper approach...if it is...then something more needs to be
> done with the function that you provided.
>
> If not, is there a better way...to generate the mean of a particular
> variable inside the " for loop " used earlier...given below:
>
>> lm.list2 <- list()
>> for(i in seq_along(pricemedia)){
>>        regr <- paste(pricemedia[i], trendseason, sep = "+")
>>        fmla <- paste(response, regr, sep = "~")
>>        lm.list2[[i]] <- lm(as.formula(fmla), data = tryout2) }
>
>
>
> Thanks & Regards,
>
> Krunal Nanavati
> 9769-919198
>
>
> -----Original Message-----
> From: Rui Barradas [mailto:ruipbarradas at sapo.pt]
> Sent: 28 September 2012 16:02
> To: Krunal Nanavati
> Cc: David Winsemius; r-help at r-project.org
> Subject: Re: [R] Running different Regressions using for loops
>
> Hello,
>
> Try
>
> names(lm.list2[[2]]$coefficient[2] )
>
> Rui Barradas
> Em 28-09-2012 11:29, Krunal Nanavati escreveu:
>> Ok...this solves a part of my problem
>>
>> When I type   " lm.list2[2] " ...I get the following output
>>
>> [[1]]
>>
>> Call:
>> lm(formula = as.formula(fmla), data = tryout2)
>>
>> Coefficients:
>> (Intercept)       Price2       Media1      Distri1        Trend
>> Seasonality
>>      13491232     -5759030        -1520        34370        48628
>> 445351
>>
>>
>>
>>
>> When I enter   " lm.list2[[2]]$coefficient[2] " it gives me the below
>> output
>>
>> Price2
>> -5759030
>>
>> And when I enter   " lm.list2[[2]]$coefficient[[2]] " ...I get the
>> number...which is   -5759030
>>
>>
>> I am looking out for a way to get just the  " Price2 "....is there a
>> statement for that??
>>
>>
>>
>> Thanks & Regards,
>>
>> Krunal Nanavati
>> 9769-919198
>>
>>
>> -----Original Message-----
>> From: Rui Barradas [mailto:ruipbarradas at sapo.pt]
>> Sent: 28 September 2012 15:18
>> To: Krunal Nanavati
>> Cc: David Winsemius; r-help at r-project.org
>> Subject: Re: [R] Running different Regressions using for loops
>>
>> Hello,
>>
>> To access list elements you need `[[`, like this:
>>
>> summ.list[[2]]$coefficients
>>
>> Or Use the extractor function,
>>
>> coef(summ.list[[2]])
>>
>> Rui Barradas
>> Em 28-09-2012 07:23, Krunal Nanavati escreveu:
>>> Hi Rui,
>>>
>>> Excellent!!  This is what I was looking for. Thanks for the help.
>>>
>>> So, now I have stored the result of the 10 regressions in
>> "summ.list
>>> <- lapply(lm.list2, summary)"
>>>
>>> And now once I enter        " sum.list "....it gives me the output for
>> all
>>> the 10 regressions...
>>>
>>> I wanted to access a beta coefficient of one of the
>>> regressions....say "Price2+Media1+Trend+Seasonality"...the result of
> which is stored in"
>>> sum.list[2] "
>>>
>>> I entered the below statement for accessing the Beta coefficient for
>>> Price2...
>>>
>>>> summ.list[2]$coefficients[2]
>>> NULL
>>>
>>> But this is giving me " NULL " as the output...
>>>
>>> What I am looking for, is to access a beta value of a particular
>>> variable from a particular regression output and use it for further
>> analysis.
>>> Can you please help me out with this. Greatly appreciate, you guys
>>> efforts.
>>>
>>>
>>>
>>>
>>> Thanks & Regards,
>>>
>>> Krunal Nanavati
>>> 9769-919198
>>>
>>> -----Original Message-----
>>> From: Rui Barradas [mailto:ruipbarradas at sapo.pt]
>>> Sent: 27 September 2012 21:55
>>> To: Krunal Nanavati
>>> Cc: David Winsemius; r-help at r-project.org
>>> Subject: Re: [R] Running different Regressions using for loops
>>>
>>> Hello,
>>>
>>> Inline.
>>> Em 27-09-2012 13:52, Krunal Nanavati escreveu:
>>>> Hi,
>>>>
>>>> Thanks for all your help. I am stuck again, but with a new problem,
>>>> on similar lines.
>>>>
>>>> I have taken the problem to the next step now...i have now added 2
>> "for"
>>>> loops... 1 for the Price variable...and another for the Media
>>>> variable
>>>>
>>>> I have taken 5 price variables...and 2 media variables with the
>>>> "trend and seasonality"(appearing in all of them)....so in all there
>>>> will be
>>>> 10 regression to run now
>>>>
>>>> Price 1, Media 1
>>>>
>>>> Price 1, Media 2
>>>>
>>>> Price 2, Media 1'
>>>>
>>>> Price 2, Media 2
>>>>
>>>> ...and so on
>>>>
>>>> I have built up a code for it...
>>>>
>>>>
>>>>
>>>>
>>>>> tryout=read.table("C:\\Users\\Krunal\\Desktop\\R
>>>> tryout.csv",header=T,sep=",")
>>>>> cnames <- names(tryout)
>>>>> price <- cnames[grep("Price", cnames)] media <-
>>>>> cnames[grep("Media", cnames)] resp <- cnames[1] regr <- cnames[7:8]
>>>>> lm.list <- vector("list", 10) for(i in 1:5)
>>>> + {
>>>> + regress <- paste(price[i], paste(regr, collapse = "+"), sep = "+")
>>>> + for(j in 1:2) {
>>>> + regress1 <- paste(media[j],regress,sep="+") fmla <- paste(resp,
>>>> + regress1, sep = "~") lm.list[[i]] <- lm(as.formula(fmla), data =
>>>> + tryout) } }
>>>>> summ.list <- lapply(lm.list, summary) summ.list
>>>>
>>>>
>>>> But it is only running...5 regressions...only Media 1 along with the
>>>> 5 Price variables & Trend & Seasonality is regressed on
>>>> Volume...giving only
>>>> 5 outputs
>>>>
>>>> I feel there is something wrong with the    " lm.list[[i]] <-
>>>> lm(as.formula(fmla), data = tryout)"   statement.
>>> No, I don't think so. If it's giving you only 5 outputs the error is
>>> probably in the fmla construction. Put print statements to see the
>>> results of those paste() instructions.
>>>
>>> Supposing your data.frame is now called tryout2,
>>>
>>>
>>> price <- paste("Price", 1:5, sep = "") media <- paste("Media", 1:2,
>>> sep = "") pricemedia <- apply(expand.grid(price, media,
>>> stringsAsFactors = FALSE), 1, paste, collapse="+")
>>>
>>> response <- "Volume"
>>> trendseason <- "Trend+Seasonality"  # do this only once
>>>
>>> lm.list2 <- list()
>>> for(i in seq_along(pricemedia)){
>>>         regr <- paste(pricemedia[i], trendseason, sep = "+")
>>>         fmla <- paste(response, regr, sep = "~")
>>>         lm.list2[[i]] <- lm(as.formula(fmla), data = tryout2) }
>>>
>>> The trick is to use ?expand.grid
>>>
>>> Hope this helps,
>>>
>>> Rui Barradas
>>>
>>>>      I am not sure about its
>>>> placement...whether it should be in loop 2 or in loop 1
>>>>
>>>> Can you please help me out??
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Thanks & Regards,
>>>>
>>>> Krunal Nanavati
>>>> 9769-919198
>>>>
>>>> -----Original Message-----
>>>> From: Rui Barradas [mailto:ruipbarradas at sapo.pt]
>>>> Sent: 27 September 2012 16:22
>>>> To: David Winsemius
>>>> Cc: Krunal Nanavati; r-help at r-project.org
>>>> Subject: Re: [R] Running different Regressions using for loops
>>>>
>>>> Hello,
>>>>
>>>> Just to add that you can also
>>>>
>>>> lapply(lm.list, coef)
>>>>
>>>> with a different output.
>>>>
>>>> Rui Barradas
>>>> Em 27-09-2012 09:24, David Winsemius escreveu:
>>>>> On Sep 26, 2012, at 10:31 PM, Krunal Nanavati wrote:
>>>>>
>>>>>> Dear Rui,
>>>>>>
>>>>>> Thanks for your time.
>>>>>>
>>>>>> I have a question though, when I run the 5 regression, whose
>>>>>> outputs are stored in "lm.list[i]", I only get the coefficients
>>>>>> for the Intercept, Price, Trend & Seasonality as below
>>>>>>
>>>>>>
>>>>>>> lm.list[1]
>>>>>> [[1]]
>>>>>>
>>>>>> Call:
>>>>>>
>>>>>> lm(formula = as.formula(fmla), data = tryout)
>>>>>>
>>>>>> Coefficients:
>>>>>>
>>>>>> (Intercept)       Price4        Trend  Seasonality
>>>>>>
>>>>>>         9923123     -2606826        64616       551392
>>>>> summ.list <- lapply(lm.list, summary) coef.list <-
>>>>> lapply(summ.list,
>>>>> coef) coef.list
>>>>>
>>>>>> I am also looking out for t stats and p value and R squared.
>>>>> For the r.squared
>>>>>
>>>>> rsq.vec <- sapply(summ.list, "$", "r.squared") adj.rsq <-
>>>>> sapply(summ.list, "$", "adj.r.squared")
>>>>>
>>>>>> Do you know,
>>>>>> how can I get all these statistics. Also, why is " as.formula "
>>>>>> used in the lm function. It should work without that as well, right?
>>>>> No.
>>>>>> Can you please tell me, why the code that I had written, does not
>>>>>> work with R. I thought it should work perfectly.
>>>>> In R there is a difference between expression objects and character
>>>> objects.
>>>>>> Thanks & Regards,
>>>>>>
>>>>>>
>>>>>>
>>>>>> Krunal Nanavati
>>>>>>
>>>>>> 9769-919198
>>>>>>
>>>>>>
>>>>>>
>>>>>> *From:* Rui Barradas [mailto:ruipbarradas at sapo.pt]
>>>>>> *Sent:* 26 September 2012 17:13
>>>>>> *To:* Krunal Nanavati
>>>>>> *Cc:* r-help at r-project.org
>>>>>> *Subject:* Re: [R] Running different Regressions using for loops
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> Try the following.
>>>>>>
>>>>>>
>>>>>> #cnames <- names(tryout)  # in your code, use this one cnames <-
>>>>>> c("Volume", "Price1", "Price2", "Price3", "Price4", "Price5",
>>>>>> "Trend", "Seasonaliy")
>>>>>>
>>>>>> price <- cnames[grep("Price", cnames)] resp <- cnames[1] regr <-
>>>>>> cnames[7:8]
>>>>>>
>>>>>> #lm.list <- vector("list", 5)
>>>>>> for(i in 1:5){
>>>>>>         regress <- paste(price[i], paste(regr, collapse = "+"), sep
>>>>>> =
>>> "+")
>>>>>>         fmla <- paste(resp, regress, sep = "~")
>>>>>>         print(fmla)
>>>>>>         #lm.list[[i]] <- lm(as.formula(fmla), data = tryout) }
>>>>>>
>>>>>> Hope this helps,
>>>>>>
>>>>>> Rui Barradas
>>>>>>
>>>>>> Em 26-09-2012 08:08, Krunal Nanavati escreveu:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>>
>>>>>> I am trying to run many different regressions using a FOR Loop.
>>>>>>
>>>>>>
>>>>>> The input data that is read into R has the following variables
>>>>>>
>>>>>> .         Volume
>>>>>> .         Price2
>>>>>> .         Price3
>>>>>> .         Price4
>>>>>> .         Price5
>>>>>> .         Trend
>>>>>> .         Seasonality
>>>>>>
>>>>>> I want to run 5 regressions, with the Volume as an dependent
>>>>>> variable and
>>>>>>
>>>>>> Price, Trend & Seasonality as independent variables. I have read
>>>>>> the above
>>>>>>
>>>>>> mentioned variables in a variable called "tryout"
>>>>>>
>>>>>>
>>>>>>
>>>>>> I am entering the following syntax in R
>>>>>>
>>>>>>
>>>>>> for(i in 1:5)
>>>>>>
>>>>>> + {
>>>>>> + result[i]=lm(Volume~Price[i]+Trend+Seasonaliy,data=tryout)
>>>>>> + summary(result[i])
>>>>>> + }
>>>>>>
>>>>>> After running these lines.I am getting the following error message
>>>>>> Error in eval(expr, envir, enclos) : object 'Price' not found
>>>>>>
>>>>>> Can someone help me out with this error message. Appreciate for
>>>>>> your time
>>>>>>
>>>>>> and consideration.
>>>>>>
>>>>>>
>>>>>>
>>>>>>       [[alternative HTML version deleted]]
>>>>>>
>>>>>>
>>>>> David Winsemius, MD
>>>>> Alameda, CA, USA
>>>>>




More information about the R-help mailing list