Linear model fitting with covariance, by group I need to fit a linear model to a percent change value over time for grouped data and need to include covariance.
I've tried to work with these models:
fit <- lm(V3 ~ V2 + V1, data=df)

fit2 <- lm(V3 ~ V2 + V1 + group, data=df)

but it doesn't seem to show any difference in the lines slopes between the groups..
I ran into the example below in "R-blogger" and was wondering if there's anything like it that would fit my needs
lm(formula = circumference ~ age + Tree + age:Tree, data = orange.df)

 A: What you are looking for is an Interaction between your slope variable and the age variable. In R this can be done with the formula syntax, which is somewhat poorly described in the documentation of help(formula), and maybe slightly better described in the comments of my answer here (no promises).
Your formula Average ~ Event + Age + group states "Let average be linearly dependent on event, age and group". For an interaction you would use the :, *, ^ or | descriptors depending on what you want to model. 
For your case you likely want Average ~ Event + Age*group which is equivalent to Average ~ Event + Age + group + Age:group, letting each group having a different Intercept and slope. From a statistical point of view this is often also the most sensible, as this allows each group to have a different intercept, and most models don't have a logical reasoning for this not being the case. 
Alternatively if age is Nested in group, (each group is a specific age group) you could use Average ~ Event + Age|group with equivalent Average ~ Event + Age + Age:group. This basically translates to removing group dependent intercepts, and often becomes much less reasonable.
For extra confusion, Age*group is also equivalent to (Age+group)^2 in R formula terms. This basically expands the parenthesis to the second order interactions while ^3 would add interactions up to the third order (2 and 3 variable interactions) 
Edit to accommodate comment.
The OP would like to know either the average of Event grouped by group or maybe the %-change of the predicted value. In either case this can be achieved using tapply or a for loop. I will assume the data is called dat for this example.
tapply:
#Average of Average by event given group
tapply(X = dat$Average, INDEX = dat$group, FUN = mean)
#3, 0, 12, 15

#Percentage change (securely)
Percentage_Change <- function(x){
    if(!is.numeric(x) || length(x) == 1) return(NA_real_)
    rn <- range(x)
    #(end - start) / start
    diff(rn) / rn[1]
}
fit <- lm(Average ~ Event + Age * group, data = dat)
tapply(X = predict(fit), INDEX = dat$group, FUN = Percentage_Change)
#-2.8, -1.0, -1.9, -1.0 

This is equivalent to using a for loop as below
groups <- unique(dat$group)
nGroups <- length(groups)
predictChange <- eventAverage <- numeric(nGroups)
pred <- predict(fit)
for(i in 1:nGroups){
    group <- groups[i]
    index <- which(dat$group == group)
    eventAverage[i] <- mean(dat[index , "Event"])
    predictChange[i] <- Percentage_Change(pred[index])
}
#Set names
names(predictChange) <- names(eventAverage) <- groups 
predictChange
#-2.8, -1.0, -1.9, -1.0 
eventAverage
#3, 0, 12, 15

