On Jun 25, 2010, at 7:09 AM, phani kishan wrote:

On Fri, Jun 25, 2010 at 1:54 PM, Paul Hiemstra <p.hiems...@geo.uu.nl> wrote:

On 06/25/2010 10:02 AM, phani kishan wrote:

Hey,
I have a data frame x which consists of say 10 vectors. I essentially want to find out the best fit exponential smoothing for each of the vectors.

The problem while I'm getting results when i say


lapply(x,ets)


I am getting an error when I say


myprint


function(x)
{
for(i in 1:length(x))
{
ets(x[i],model="AZZ",opt.crit=c("amse"))


Hi,

Please provide a reproducible example, as stated in the posting guide. My guess is that replacing x[i] by x[[i]] would solve the problem. Double brackets return a vector in stead of a data.frame that has just column i.

Hey Paul,
As requested.
My example data frame

sdata:
               SKU1            SKU2           SKU3           SKU4
1 583.8 574.6 1106.9 648.1 2 441.7 552.8 1021.3 353.6 3 454.2 555.7 998.3 306.4 4 569.7 507.6 811.1 360.7 5 512.3 620.0 1046.3 713.9 6 580.8 668.2 732.0 490.9 7 648.5 766.9 653.4 422.1 8 617.4 657.1 602.1 190.8 9 826.8 767.3 640.5 324.1 10 1163.0 657.6 429.6 181.1 11 643.5 788.9 569.1 331.9 12 846.9 568.6 425.1 224.6 13 580.7 582.9 434.2 226.9

now when I apply
lapply(sdata,ets)
I get a result as:
$SKU1
ETS(A,N,N)

Call:
ets(y = x, model = "AZZ")

 Smoothing parameters:
   alpha = 0.3845

 Initial states:
   l = 533.3698

 sigma:  181.7615

    AIC     AICc      BIC
172.6144 173.8144 173.7443

$SKU2
ETS(A,N,N)

Call:
ets(y = x, model = "AZZ")

 Smoothing parameters:
   alpha = 0.5026

 Initial states:
   l = 567.821

 sigma:  86.7074

    AIC     AICc      BIC
153.3704 154.5704 154.5003

$SKU3
ETS(A,A,N)

Call:
ets(y = x, model = "AZZ")

 Smoothing parameters:
   alpha = 1e-04
   beta  = 1e-04

 Initial states:
   l = 1189.2221
   b = -64.3776

 sigma:  85.4153

    AIC     AICc      BIC
156.9800 161.9800 159.2398

$SKU4
ETS(A,A,N)

Call:
ets(y = x, model = "AZZ")

 Smoothing parameters:
   alpha = 1e-04
   beta  = 1e-04

 Initial states:
   l = 566.9001
   b = -27.8818

 sigma:  127.2654

    AIC     AICc      BIC
167.3475 172.3475 169.6073

Now when I run the same using:
myfun<-function(x)
{
for(i in 1:length(x))
{
ets(x[i])

}
}
I got the error as mentioned before. Now on modifying it to
myfun<-function(x)
{
for(i in 1:length(x))
{
return(ets(x[[i]])
}
}
I only got the output as
ETS(A,N,N)

Call:
ets(y = x[[i]], model = "AZZ", opt.crit = c("amse"))

 Smoothing parameters:
   alpha = 0.3983

 Initial states:
   l = 516.188

 sigma:  181.8688

    AIC     AICc      BIC
172.6298 173.8298 173.7597

I think its considering whole dataframe as a series.

Doubtful. It is quietly calculating all of the requested models but you did not do anything with them inside the loop (which is a function). You could have assigned them to something permanent or printed them (or both):

ets_x <- list()
for(i in 1:length(x))
{
print(ets(x[[i]]); ets_x <- c(ets_x, ets(x[[i]])
}
}

ets_x

As said my objective it to essentially come up with a best exponential model for each of the SKU's in the dataframe. However I want to be able to extract
information like mse, mape etc later. So kindly suggest.

Thanks in advance,
Phani



______________________________________________
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