[R] Running different Regressions using for loops

Krunal Nanavati krunal.nanavati at cogitaas.com
Fri Sep 28 13:07:16 CEST 2012


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