Marc RABIAU
Nicolas FOURNEL
Odile WEYCKMANS
|
Projet station météo 2002
Statistiques : la régression linéaire et polynomiale
|
Leïla TRAORE
Matthieu HAUTREUX
Maxime CHAMBREUIL
|
Sujet : Traitement de l'information : prévision de la température
Nous avions à :
- Récupérer les données "température" dans la BD,
- Faire des traitements statistiques de prévision par régression linéaire et polynomiale(en utilisant le logiciel R) pour prévoir la prochaine température et la température moyenne du jour suivant,
- Remettre les résultats dans la BD.
Recherche d'informations
Nous avons commencé par faire une recherche sur Internet pour comprendre le fonctionnement du logiciel R. Puis nous avons eu accès à la documentation papier du logiciel. Nous avons également recherché les packages qui pourraient nous servir pour la régression linéaire et polynomiale.
Installation du logiciel et ses packages
Le logiciel
Le logiciel R était déjà présent sur le serveur station météo, mais il a fallu le réinstaller car l'installation des packages
et le chargement de certains fichiers ne se faisaient pas. Le logiciel R est un language, un environnement de statistiques. Les principes et les commandes se rapprochent de Matlab.
Ce logiciel propose :
- les tables de nombreuses lois,
- une large collection de méthodes de statistiques et d'analyse de données,
- un langage pour exprimer et manipuler les modèles statistiques (linéaires et non-linéaires),
- des facilités graphiques importantes pour visualiser les analyses effectuées,
- un langage de programmation orienté objet qui permet d'ajouter de nouvelles fonctions.
Les packages
La fonction de régression linéaire est contenue dans le logiciel R de base. Par contre, nous avons eu à rajouter le package RPgSQL pour faire le lien entre le logiciel et la base de données et le package lpridge pour faire la régression polynomiale. Pour installer un package, on se place dans le logiciel R, sur une ligne de commande et on tape :
> options(CRAN="http://CRAN.r-project.org/")
pour configurer l'adresse où télécharger les packages
>install.packages("nom_du_package")
pour installer le package choisit.
Une fois l'installation du package faite, il faut charger le package en utilisant la fonction :
>library("nom_du_package")
Ensuite, on peut utiliser toutes les fonctions du package.
Régression linéaire et polynomiale
Nous avons créé une fonction qui nous permet de nous connecter à la base et récupérer les informations qui nous intéressent. Puis nous calculons la régression linéaire à partir des fonctions lm et lpridge. Enfin, une requête sql met dans la base les résultats de la régression, donc la prévision de la température. Nous devons donner la prochaine température de la journée et la température moyenne de la journée suivante. Pour cela, nous avons donc fait deux scripts qui sont appelés automatiquement. Le script pour la prochaine température dans 5 minutes doit être déclenché à chaque fois qu'il y a une nouvelle température, mesurée par le capteur. Notre première idée était de déclencher le script dès qu'il y avait une nouvelle température entrée dans la base de données. Seulement, le script est lancé du serveur web, or les données sont transmises à l'autre serveur. Donc nous avons décidé de fonctionner avec un cron qui lance le script toutes les cinq minutes. Pour cela, il faut synchroniser les deux serveurs et lancer les crons en tenant compte du temps de transmission et d'écriture des données d'un serveur à l'autre. Le script pour la température moyenne du lendemain est déclenché à heure fixe par un cron une fois par jour. Dans ce script, on calcule la moyenne des températures de la journée actuelle, puis on fait la prévision pour le lendemain.
La fonction de connexion
pgconnect<-function(requete)
{
library(RPgSQL)
db.connect("")
db.execute(requete)
return()
}
La fonction lm
La fonction lm est utilisée pour faire des régressions linéaires. Si nous avons les données suivantes constituant le nuage de points dont on cherche la regression linéaire:
Pour réaliser la regression il faut utiliser la fonction lm :
reg<-lm(y~x)
Maintenant si nous voulons prédire par exemple la valeur de y pour une abscisce x égale à 12, on utilise la fonction predict:
pred<-predict(reg,data.forme(x=12), interval="prediction")
pred contient alors la prédiction moyenne, maximale et minimale de la valeur de y. La valeur qui nous interesse (la valeur moyenne) est récupérée de la manière suivante:
resultat<-pred[1]
La fonction lpridge
Cette fonction nous permet de faire de la régression polynomiale.
Exemple du fonctionnement :
Supposons que nous voulions retrouver la fonction théorique f(x)=x^3+x^2+2. On crée donc deux vecteurs de données correspondant à cette fonction en tapant :
a<-c(1,2,3,4,5)
b<-c(4,14,38,82,152)
Ces deux vecteurs correspondent à un échantillon de données vérifiant en théorie notre fonction. On souhaite deviner la valeur du vecteur b pour une valeur de a égale à 12. Pour cela, on utilise notre fonction lpridge :
res<-lpridge(a,b,bandw=5,order=3,ridge=0,x.out=12)
La variable res contient les différents résultats du lpridge. On obtient ensuite notre estimation dans la variable res$est order=3 correspond au degré maximal du polynôme recherché. Il faut donc au préalable avoir une idée du degré du polynôme engendrant les résultats expérimentaux. A défaut, on peut en mettre un supérieur.
Problèmes rencontrés
- Matériel non disponible : en début de semaine, nous n'avions pas d'ordinateur ni de réseau pour travailler. Et nous n'avons toujours pas d'imprimante.
- Problème avec le module pour accéder à la base de données. L'installation se passe correctement, mais ensuite, le chargement du module pose un problème.
- Nous n'avons pas eu de base de données pour tester nos fonctions...
Last modified: Thu Sep 12 18:23:09 /etc/localtime 2002