# SSA - SINGULAR SPETRUM ANALYSIS


setwd("C:/Users/S�rgio/Documents/Disserta��es/Tese Ana")


data <- read.csv('T Cuiaba.txt',header = TRUE)

ndat <- nrow(data)

print(ndat)

#print(data$X)

MEM = as.integer(sqrt(2*ndat))   # Dimens�o da matriz de correla��o = mem�ria

MCorr <- matrix(0.0,nrow=MEM,ncol=MEM)



# CALCULO DA MATRIZ DE CORRELA��O:

for (i in 1:MEM){
for (j in 1:MEM){

	soma <- 0.0
	kmax <- ndat - as.integer(abs(i-j))

	for(k in 1:kmax){

		soma <- soma + data$X[k] * data$X[k + as.integer(abs(i-j))]		

	}#for k

	MCorr[i,j] <- soma/(ndat - abs(i-j))

}#for j

print(i)

}#for i


# CALCULO DE AUTOVALORES E AUTOVETORES DA MATRIZ DE CORRELA��O

Autovalores <- rep(0.0,times=MEM)
Autovetores <- matrix(0.0,nrow=MEM,ncol=MEM)

eigen(MCorr)

Autovalores <- eigen(MCorr)$values
Autovetores <- eigen(MCorr)$vectors

print(Autovalores)
#print(eigen(MCorr)$vectors)

plot(Autovetores[,10])


#ORDENA O VALOR ABSOLUTO DOS AUTOVALORES EM ORDEM DECRESCENTE:

Autoval_ABS <- rep(0.0,times=MEM)
Autoval_LOG <- rep(0.0,times=MEM)


for(j in 1:MEM){

	Autoval_ABS[j] <- abs(Autovalores[j])

}

Autoval_LOG <- sort(Autoval_ABS, decreasing = TRUE)

for(j in 1:MEM){

	Autoval_LOG[j] <- log10(Autoval_LOG[j])

}

plot(Autoval_LOG)


# CALCULO DAS COMPONENTES PRINCIPAIS

ncomp <- 20	#Calcula 20 componentes principais

PC <- matrix(0.0,nrow=ndat,ncol=ncomp)



for (k in 1:ncomp){

for (i in 1:ndat){
for (j in 1:MEM){

	PC[i,k] <- PC[i,k] + data$X[i+j-1] * Autovetores[j,k]

}
}
}

write.table(PC,file = "Componentes Principais", sep=" ", eol="\n")



#RECONSTRU��O DA SERIE TEMPORAL:

Qcomp <- 5   # quantidade de componentes

RSK <- rep(0.0,times=ndat)

for(i in 1:(ndat-MEM-1)){

if(i<MEM) {
	NORMAL <- i
	Lt <- 1
	Ut <- i
	}
if(i>=MEM) {
	NORMAL <- MEM
	Lt <- 1
	Ut <- MEM
	}


for(k in 1:Qcomp){

	for(j in Lt:Ut){

		RSK[i] <- RSK[i] + PC[i-j+1,k]*Autovetores[j,k] 
	}  # for j
}  # for k

RSK[i] <- RSK[i]/NORMAL

}  # for i

plot(RSK)

write.table(RSK,file = "Serie Reconstituida", sep=" ", eol="\n")