Wiimote
library(ggplot2)
# Importer les données
data <- read.csv("C:\\Users\\celia\\Documents\\wimote.csv", sep = ";")
# Vérifier les premières lignes du jeu de données
print(head(data))
## x RR
## 1 NA -0.296
## 2 NA -0.222
## 3 NA -0.148
## 4 NA -0.185
## 5 NA -0.333
## 6 NA -0.407
# Question A
# Extraire la série temporelle y de la colonne 'RR'
y <- data$RR
# Créer un data frame avec les indices de temps
df <- data.frame(Temps = 1:length(y), RR = y)
# Tracer la série temporelle
ggplot(df, aes(x = Temps, y = RR)) +
geom_line() +
labs(title = "Série temporelle y", x = "Temps", y = "RR")

# Question B
# Calculer la moyenne de y
mean_y <- mean(y)
# Calculer le profil Y en soustrayant la moyenne de y
Y <- y - mean_y
# Créer un data frame avec les indices de temps et le profil Y
df_Y <- data.frame(Temps = 1:length(Y), Y = Y)
# Tracer le profil Y
ggplot(df_Y, aes(x = Temps, y = Y)) +
geom_line() +
labs(title = "Profil Y", x = "Temps", y = "Y")

# Question C
# Fonction pour estimer la tendance locale avec une fenêtre linéaire
local_trend <- function(Y, window_size) {
trend <- rep(0, length(Y))
half_window <- floor(window_size / 2)
for (i in (half_window + 1):(length(Y) - half_window)) {
window <- Y[(i - half_window):(i + half_window)]
trend[i] <- lm(window ~ seq_along(window))$fitted.values[half_window + 1]
}
return(trend)
}
# Taille de la fenêtre (exemple)
window_size <- 20
# Estimer la tendance locale
trend <- local_trend(Y, window_size)
# Tracer la tendance locale
df_trend <- data.frame(Temps = 1:length(Y), Trend = trend)
ggplot(df_trend, aes(x = Temps, y = Trend)) +
geom_line(color = "red") +
labs(title = "Tendance locale", x = "Temps", y = "Trend") +
theme_minimal()

# Calculer l'erreur quadratique moyenne (RMSE)
rmse <- sqrt(mean((Y - trend)^2))
# Afficher l'erreur quadratique moyenne (RMSE)
print(paste("Erreur quadratique moyenne (RMSE):", rmse))
## [1] "Erreur quadratique moyenne (RMSE): 0.588758957678203"
# Question D
# Tracer le profil Y et la tendance locale
df_trend <- data.frame(Temps = 1:length(Y), Y = Y, Trend = trend)
ggplot(df_trend, aes(x = Temps)) +
geom_line(aes(y = Y), color = "blue") +
geom_line(aes(y = Trend), color = "red") +
labs(title = "Profil Y et tendance locale", x = "Temps", y = "Valeur") +
theme_minimal()

# Configuration des hyperparamètres
S <- 15
s_min <- 20
s_max <- length(Y) / 2
H <- 20
# Fonction pour calculer les fluctuations locales
fluctuations <- function(Y, window_size) {
F <- numeric(H)
for (h in 1:H) {
start <- sample(1:(length(Y) - window_size + 1), 1)
window <- Y[start:(start + window_size - 1)]
trend <- local_trend(window, window_size)
F[h] <- sqrt(mean((window - trend)^2))
}
return(F)
}
# Question E
# Calculer les tailles de fenêtres
sizes <- seq(s_min, s_max, length.out = S)
# Calculer les fluctuations locales pour chaque taille de fenêtre
F <- sapply(sizes, function(s) mean(fluctuations(Y, s)))
# Tracer les fluctuations moyennes
df_fluctuations <- data.frame(TailleFenetre = sizes, Fluctuation = F)
ggplot(df_fluctuations, aes(x = TailleFenetre, y = Fluctuation)) +
geom_line() +
geom_point() +
labs(title = "Fluctuations moyennes", x = "Taille de fenêtre", y = "Fluctuation") +
theme_minimal()

# Calculer le coefficient DFA
log_sizes <- log(sizes)
log_F <- log(F)
dfa_model <- lm(log_F ~ log_sizes)
alpha <- coef(dfa_model)[2]
# Question F
# Ajouter la tendance linéaire au tracé
ggplot(df_fluctuations, aes(x = log_sizes, y = log_F)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "red") +
labs(title = "Fluctuations moyennes avec tendance linéaire", x = "Log(Taille de fenêtre)", y = "Log(Fluctuation)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# Question G
# Afficher le coefficient DFA
print(paste("Coefficient DFA:", alpha))
## [1] "Coefficient DFA: 0.072311883644034"
# Configuration des hyperparamètres
S <- 500
s_min <- 20
s_max <- length(Y) - 2
H <- 100
# Fonction pour calculer les fluctuations locales sans moyenne
fluctuations_no_avg <- function(Y, window_size) {
F <- numeric(length(Y) - window_size + 1)
for (start in 1:(length(Y) - window_size + 1)) {
window <- Y[start:(start + window_size - 1)]
trend <- local_trend(window, window_size)
F[start] <- sqrt(mean((window - trend)^2))
}
return(F)
}
# Calculer les fluctuations locales pour chaque taille de fenêtre sans moyenne
sizes <- seq(s_min, s_max, length.out = S)
F_no_avg <- unlist(lapply(sizes, function(s) fluctuations_no_avg(Y, s)))
# Créer un data frame pour les fluctuations complètes
df_full_fluctuations <- data.frame(
TailleFenetre = rep(sizes, length.out = length(F_no_avg)),
Fluctuation = F_no_avg
)
# Tracer le nuage de fluctuations
ggplot(df_full_fluctuations, aes(x = TailleFenetre, y = Fluctuation)) +
geom_point(size = 0.1, alpha = 0.1) +
labs(title = "Nuage de fluctuations", x = "Taille de fenêtre", y = "Fluctuation") +
theme_minimal()
