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 à :

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 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


Last modified: Thu Sep 12 18:23:09 /etc/localtime 2002