I want to run a function called autocorrelation over several data frames. Also, I want to save the values of the structure called Ac_results I get every time I run the function. Therefore, it is like I want to concatenate the values one below another every time the function runs. Currently, I create a data frame outside the function and try to update it inside the function concatenating the new values using the function cbind
, but it is not working. Any idea about how to solve it?
Ac <- data.frame("Name"=character(),"Lag1"=double(),"Low"=double(),"Up"=double(),"Significance"=character())
#AUTOCORRELATION
autocorrelation <- function(x,y,i){
mean_x <- mean(x)
Denominador <- (x[] - mean(x))^2 #Denominator
k=1; n=length(x)-k; u=1
Numerador <- numeric(n)
for (u in 1:n) {
Numerador[u] <- (x[u] - mean_x)*(x[u+k] - mean_x) #Numerador
}
Lag1 <- ifelse(sum(Denominador)!=0,((1/(length(x)-1))*sum(Numerador))/((1/length(x))*sum(Denominador)),0) #Lag 1
low <- (-1 - (1.96*sqrt(length(x)-2)))/(length(x)-1) #5% significance level
up <- (-1 + (1.96*sqrt(length(x)-2)))/(length(x)-1) #5% significance level
Significance <- ifelse( up <= Lag1 & Lag1 >= low,"Independent","No independent") #Significance
Ac_results <- structure(list(Name=y,Lag1=Lag1,Low=low,Up=up,Significance=Significance)) #save the results
Ac <- cbind(Ac, Ac_results)
}
write.csv(Ac, file ="Lag.csv")