Hi: I have usually used the GROWTH() excel function to do this but now want to see if I can do this with R. I want to predict values into the future, possibly with the predict.arima Function. I have the following weekly fish weight averages: weight <- c("2.1","2.4","2.8","3.6","4.1","5.2","6.3") week <- c("1","2","3","4","5","6","7") I would like to predict what the weight will be by week 10 based on my weight values and make a line plot of all the weights(including the predicted values). I have two questions: 1- Should the predicted values be linear or exponential? 2- Is the predict.arima function appropriate to do this? Thanks in advance. Felipe D. Carrillo Supervisory Fishery Biologist Department of the Interior US Fish & Wildlife Service California, USA
Here is a bit of an exploration of your data but first a couple of notes. * the information about Excel is probably a bit superfluous here. Some of us have no idea about Excel, and rather hope it can stay that way. * With such a short series, you don't stand much chance of fitting a time series model such as with arima. It's clearly not stationary, too. If you had multiple growth curves you may stand some chance of fitting a correlated model, but with just one, I don't think so. For now, I think you just may have to make the hopeful assumption of independence. You might like to look at this. ________________________________ weightData <- data.frame(weight = c(2.1,2.4,2.8,3.6,4.1,5.2,6.3), week = 1:7) plot(weight ~ week, weightData) plot(log(weight) ~ week, weightData) ### clearly the log plot seems to linearise things. ### Try an non-linear regression: wModel <- nls(weight ~ alpha + beta*exp(gamma*week), weightData, start = c(alpha = 0.0, beta = 1, gamma = 0.2), trace = TRUE) #### you should look at the residuals from this to see if the assumptions #### look reasonable. With only 7, you can't see much, though. #### now suppose you want to predict for another 3 weeks: newData <- data.frame(week = 1:10) newData$pweight <- predict(wModel, newData) plot(pweight ~ week, newData, pch = 4, col = "red", ylab = "Weight", xlab = "Week") with(weightData, points(week, weight)) #### looks OK to me (thought fish cannot keep on growing exponentailly #### forever - this is clearly a model with limitations and you have to #### be careful when pushing it too far). #### finally predict on a more continuous scale and add in the result as #### a blue line. lData <- data.frame(week = seq(1, 10, len = 1000)) with(lData, lines(week, predict(wModel, lData), col = "blue")) #### Now that we have over-analysed this miniscule data set to blazes, #### perhaps it's time for a beer! __________________________________ Bill Venables http://www.cmis.csiro.au/bill.venables/ -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Felipe Carrillo Sent: Sunday, 5 April 2009 4:13 PM To: r-help at stat.math.ethz.ch Subject: [R] predicting values into the future Hi: I have usually used the GROWTH() excel function to do this but now want to see if I can do this with R. I want to predict values into the future, possibly with the predict.arima Function. I have the following weekly fish weight averages: weight <- c("2.1","2.4","2.8","3.6","4.1","5.2","6.3") week <- c("1","2","3","4","5","6","7") I would like to predict what the weight will be by week 10 based on my weight values and make a line plot of all the weights(including the predicted values). I have two questions: 1- Should the predicted values be linear or exponential? 2- Is the predict.arima function appropriate to do this? Thanks in advance. Felipe D. Carrillo Supervisory Fishery Biologist Department of the Interior US Fish & Wildlife Service California, USA ______________________________________________ R-help at 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.
Try this:> library(forecast) > weight <- as.numeric(weight) > fc <- forecast(weight) > plot(fc)With this data it chooses a model with multiplicative error and trend and no seasonality. On Sun, Apr 5, 2009 at 2:13 AM, Felipe Carrillo <mazatlanmexico at yahoo.com> wrote:> > Hi: > I have usually used the GROWTH() excel function to do this but now want to see if I can do this with R. > I want to predict values into the future, possibly with the predict.arima Function. > I have the following weekly fish weight averages: > > weight <- c("2.1","2.4","2.8","3.6","4.1","5.2","6.3") > week ? <- c("1","2","3","4","5","6","7") > > I would like to predict what the weight will be by week 10 based on my weight values and make a line plot of all the weights(including the predicted values). I have two questions: > 1- Should the predicted values be linear or exponential? > 2- Is the predict.arima function appropriate to do this? > Thanks in advance. > > > Felipe D. Carrillo > Supervisory Fishery Biologist > Department of the Interior > US Fish & Wildlife Service > California, USA > > ______________________________________________ > R-help at 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. >
Thank you Bill and Gabor: I do have a few years of fish sizes data (from larvae to juvenile). If I melt them together how can I create the best model to predict future weights. My weeks go up to 16 right now, but I want to predict weights for week 17 to 20. Based on both of you examples it was easy to fit a model with one year but I can't figure out how to create a model with all the years together. Perhaps my data isn't organized the correct way. See the data below: mydf <- read.table(textConnection("first second third fourth fifth sixth seventh 0.08 0.003 0.1 0.003 0.003 0.003 0.002 0.3 0.11 0.6 0.06 0.13 0.02 0.12 1.78 0.33 2.1 0.26 0.69 0.23 0.34 2.91 0.63 4 0.76 1.51 0.87 1.08 4.4 1.51 6.2 1.63 2.57 1.27 1.91 5.5 2.34 8.17 2.49 3.2 2.65 2.8 6.69 3.3 9.64 3.6 5 3.91 4.17 7.8 5 12.1 5.5 6.2 4.9 5.2 9.1 6.2 15 7 7.7 6.3 6.7 10.6 7.7 16.5 8.5 9.2 7.8 8.2 12.1 9.2 18 10 11.6 9.4 9.7 13.6 12.2 19.5 12.9 13.3 10.9 11.2 16.8 13.7 22.2 14.4 15 12.9 13.2 18 15.7 23.7 15.9 16 13.9 14.2 20 16.7 26 16.9 16 17.2 17.9 21 18 27.2 18.1 17 18.3 19.1"),header=T) mydf mydf$week <- 1:16 mydf <- melt(mydf) colnames(mydf) <- c('week','year','weights') attach(mydf) --- On Sun, 4/5/09, Bill.Venables at csiro.au <Bill.Venables at csiro.au> wrote:> From: Bill.Venables at csiro.au <Bill.Venables at csiro.au> > Subject: RE: [R] predicting values into the future > To: mazatlanmexico at yahoo.com, r-help at stat.math.ethz.ch > Date: Sunday, April 5, 2009, 12:09 AM > Here is a bit of an exploration of your data but first a > couple of notes. > > * the information about Excel is probably a bit superfluous > here. Some of us have no idea about Excel, and rather hope > it can stay that way. > > * With such a short series, you don't stand much chance > of fitting a time series model such as with arima. It's > clearly not stationary, too. If you had multiple growth > curves you may stand some chance of fitting a correlated > model, but with just one, I don't think so. For now, I > think you just may have to make the hopeful assumption of > independence. > > You might like to look at this. > > ________________________________ > > weightData <- data.frame(weight > c(2.1,2.4,2.8,3.6,4.1,5.2,6.3), > week = 1:7) > > plot(weight ~ week, weightData) > plot(log(weight) ~ week, weightData) > > ### clearly the log plot seems to linearise things. > ### Try an non-linear regression: > > wModel <- nls(weight ~ alpha + beta*exp(gamma*week), > weightData, > start = c(alpha = 0.0, beta = 1, gamma > 0.2), trace = TRUE) > > #### you should look at the residuals from this to see if > the assumptions > #### look reasonable. With only 7, you can't see much, > though. > > #### now suppose you want to predict for another 3 weeks: > > newData <- data.frame(week = 1:10) > newData$pweight <- predict(wModel, newData) > > plot(pweight ~ week, newData, pch = 4, col > "red", ylab = "Weight", xlab > "Week") > with(weightData, points(week, weight)) > > #### looks OK to me (thought fish cannot keep on growing > exponentailly > #### forever - this is clearly a model with limitations and > you have to > #### be careful when pushing it too far). > > #### finally predict on a more continuous scale and add in > the result as > #### a blue line. > > lData <- data.frame(week = seq(1, 10, len = 1000)) > with(lData, lines(week, predict(wModel, lData), col > "blue")) > > #### Now that we have over-analysed this miniscule data set > to blazes, > #### perhaps it's time for a beer! > > __________________________________ > > Bill Venables > http://www.cmis.csiro.au/bill.venables/ > > > -----Original Message----- > From: r-help-bounces at r-project.org > [mailto:r-help-bounces at r-project.org] On Behalf Of Felipe > Carrillo > Sent: Sunday, 5 April 2009 4:13 PM > To: r-help at stat.math.ethz.ch > Subject: [R] predicting values into the future > > > Hi: > I have usually used the GROWTH() excel function to do this > but now want to see if I can do this with R. > I want to predict values into the future, possibly with the > predict.arima Function. > I have the following weekly fish weight averages: > > weight <- > c("2.1","2.4","2.8","3.6","4.1","5.2","6.3") > week <- > c("1","2","3","4","5","6","7") > > I would like to predict what the weight will be by week 10 > based on my weight values and make a line plot of all the > weights(including the predicted values). I have two > questions: > 1- Should the predicted values be linear or exponential? > 2- Is the predict.arima function appropriate to do this? > Thanks in advance. > > > Felipe D. Carrillo > Supervisory Fishery Biologist > Department of the Interior > US Fish & Wildlife Service > California, USA > > ______________________________________________ > R-help at 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.
Thank you Bill and Gabor: I do have a few years of fish sizes data (from larvae to juvenile). If I melt them together how can I create the best model to predict future weights. My weeks go up to 16 right now, but I want to predict weights for week 17 to 20. Based on both of you examples it was easy to fit a model with one year but I can't figure out how to create a model with all the years together.See the data below: mydf <- read.table(textConnection("first second third fourth fifth sixth seventh 0.08 0.003 0.1 0.003 0.003 0.003 0.002 0.3 0.11 0.6 0.06 0.13 0.02 0.12 1.78 0.33 2.1 0.26 0.69 0.23 0.34 2.91 0.63 4 0.76 1.51 0.87 1.08 4.4 1.51 6.2 1.63 2.57 1.27 1.91 5.5 2.34 8.17 2.49 3.2 2.65 2.8 6.69 3.3 9.64 3.6 5 3.91 4.17 7.8 5 12.1 5.5 6.2 4.9 5.2 9.1 6.2 15 7 7.7 6.3 6.7 10.6 7.7 16.5 8.5 9.2 7.8 8.2 12.1 9.2 18 10 11.6 9.4 9.7 13.6 12.2 19.5 12.9 13.3 10.9 11.2 16.8 13.7 22.2 14.4 15 12.9 13.2 18 15.7 23.7 15.9 16 13.9 14.2 20 16.7 26 16.9 16 17.2 17.9 21 18 27.2 18.1 17 18.3 19.1"),header=T) mydf mydf$week <- 1:16 mydf <- melt(mydf) colnames(mydf) <- c('week','year','weights') attach(mydf)> > * With such a short series, you don't stand much chance > of fitting a time series model such as with arima. It's > clearly not stationary, too. If you had multiple growth > curves you may stand some chance of fitting a correlated > model, but with just one, I don't think so. For now, I > think you just may have to make the hopeful assumption of > independence. > > You might like to look at this. > > ________________________________ > > weightData <- data.frame(weight > c(2.1,2.4,2.8,3.6,4.1,5.2,6.3), > week = 1:7) > > plot(weight ~ week, weightData) > plot(log(weight) ~ week, weightData) > > ### clearly the log plot seems to linearise things. > ### Try an non-linear regression: > > wModel <- nls(weight ~ alpha + beta*exp(gamma*week), > weightData, > start = c(alpha = 0.0, beta = 1, gamma > 0.2), trace = TRUE) > > #### you should look at the residuals from this to see if > the assumptions > #### look reasonable. With only 7, you can't see much, > though. > > #### now suppose you want to predict for another 3 weeks: > > newData <- data.frame(week = 1:10) > newData$pweight <- predict(wModel, newData) > > plot(pweight ~ week, newData, pch = 4, col > "red", ylab = "Weight", xlab > "Week") > with(weightData, points(week, weight)) > > #### looks OK to me (thought fish cannot keep on growing > exponentailly > #### forever - this is clearly a model with limitations and > you have to > #### be careful when pushing it too far). > > #### finally predict on a more continuous scale and add in > the result as > #### a blue line. > > lData <- data.frame(week = seq(1, 10, len = 1000)) > with(lData, lines(week, predict(wModel, lData), col > "blue")) > > #### Now that we have over-analysed this miniscule data set > to blazes, > #### perhaps it's time for a beer! > > __________________________________ > > Bill Venables > http://www.cmis.csiro.au/bill.venables/> Hi: > I have usually used the GROWTH() excel function to do this > but now want to see if I can do this with R. > I want to predict values into the future, possibly with the > predict.arima Function. > I have the following weekly fish weight averages: > > weight <- > c("2.1","2.4","2.8","3.6","4.1","5.2","6.3") > week <- > c("1","2","3","4","5","6","7") > > I would like to predict what the weight will be by week 10 > based on my weight values and make a line plot of all the > weights(including the predicted values). I have two > questions: > 1- Should the predicted values be linear or exponential? > 2- Is the predict.arima function appropriate to do this? > Thanks in advance. > > > Felipe D. Carrillo > Supervisory Fishery Biologist > Department of the Interior > US Fish & Wildlife Service > California, USA > > ______________________________________________ > R-help at 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.