[R] Running different Regressions using for loops
Krunal Nanavati
krunal.nanavati at cogitaas.com
Fri Sep 28 12:29:25 CEST 2012
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