Power regression in R similar to excel

ggplot2, r

Solution

Use `nls` (nonlinear least squares) as your smoother

eg

ggplot(DD,aes(x = Discharge,y = Age)) +
  geom_point() + 
  stat_smooth(method = 'nls', formula = 'y~a*x^b', start = list(a = 1,b=1),se=FALSE)

Noting Doug Bates comments on R-squared values and non-linear models here, you could use the ideas in Adding Regression Line Equation and R2 on graph

to append the regression line equation

# note that you have to give it sensible starting values
# and I haven't worked out why the values passed to geom_smooth work!
power_eqn = function(df, start = list(a =300,b=1)){
  m = nls(Discharge ~ a*Age^b, start = start, data = df);
  eq <- substitute(italic(y) == a  ~italic(x)^b, 
               list(a = format(coef(m)[1], digits = 2), 
                    b = format(coef(m)[2], digits = 2)))
  as.character(as.expression(eq));                 
}

ggplot(DD,aes(x = Discharge,y = Age)) +
  geom_point() + 
  stat_smooth(method = 'nls', formula = 'y~a*x^b', start = list(a = 1,b=1),se=FALSE) +  
  geom_text(x = 600, y = 1, label = power_eqn(DD), parse = TRUE)

Problem

I have a simple dataset and I am trying to use the power trend to best fit the data. The sample data is very small and is as follows: ``` structure(list(Discharge = c(250, 300, 500, 700, 900), Downstream = c(0.3, 0.3, 0.3, 0.3, 0.3), Age = c(1.32026239202165, 1.08595138888889, 0.638899189814815, 0.455364583333333, 0.355935185185185)), .Names = c("Discharge", "Downstream", "Age"), row.names = c(NA, 5L), class = "data.frame") ``` Data looks as follows: ``` > new Discharge Downstream Age 1 250 0.3 1.3202624 2 300 0.3 1.0859514 3 500 0.3 0.6388992 4 700 0.3 0.4553646 5 900 0.3 0.3559352 ``` I tried to plot the above data using `ggplot2` ``` ggplot(new)+geom_point(aes(x=Discharge,y=Age)) ``` I could add the linear line using `geom_smooth(method="lm")` but I am not sure what code do I need to show the power line. The output is as follows: How Can I add a power linear regression line as done in excel ? The excel figure is shown below:

Original source

Related problems