Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > R
R Forum d'entraide sur la programmation en langage R
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/12/2012, 12h30   #1
CupOfAppleTea
Invité de passage
 
Inscription : mars 2012
Messages : 44
Détails du profil
Informations forums :
Inscription : mars 2012
Messages : 44
Points : 2
Points : 2
Par défaut Régression-->Réduction du pas de temps d'un jeu de données

Bonjour,

Je dispose d'un jeu de données de température (fichier en pièce jointe) avec un pas de temps que je souhaiterais plus fin. C-à-d que je voudrais, à partir des données dont je dispose, générer des points intermédiaires, calculés. Auriez-vous une idée de la manière dont je pourrais procéder par le biais d'une régression, ou autre?

J'imaginais pouvoir appliquer une régression linéaire entre chaque couple de points. Il s'agit de la température de l'air et celle-ci ne présente pas de variabilité "inattendue", elle évolue assez linéairement. Comment puis-je procéder pour faire cela en routine sur R? C-a-d pour appliquer une régression linéaire entre chaque couple de point, du 1er jusqu'au dernier.

Merci d'avance pour votre aide!
Fichiers attachés
Type de fichier : txt Data_Temp.txt (9,7 Ko, 2 affichages)
CupOfAppleTea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h11   #2
A. D.
Modératrice
 
Femme Aline Deschamps
Chargée de Statistiques
Inscription : juin 2010
Messages : 465
Détails du profil
Informations personnelles :
Nom : Femme Aline Deschamps
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chargée de Statistiques
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : juin 2010
Messages : 465
Points : 1 294
Points : 1 294
Envoyer un message via Skype™ à A. D.
Bonjour,

Pour la régression linéaire, vous avez la fonction : lm, et vous pouvez utiliser la fonction predict pour utiliser les coefficients estimés lors de la régression afin de déterminer des valeurs en de nouveaux points.

Cependant, attention à vos remarques : la température n'est pas linéaire dans le temps.
Voir :

Code :
1
2
X<-read.table("Data_Temp.txt",header=TRUE,sep="\t")
plot(1:357,X$Temp,type="l",col="red")

Cordialement,

A.D.
__________________

Forum R
Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/ .

Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.
A. D. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 16h04   #3
CupOfAppleTea
Invité de passage
 
Inscription : mars 2012
Messages : 44
Détails du profil
Informations forums :
Inscription : mars 2012
Messages : 44
Points : 2
Points : 2
Bonjour,

Je reviens vers vous concernant le même problème qui je pense peut être résolu par la fonction "approx".

En effet, comme vous le dites, la température n'est pas linéaire dans le temps. Cependant, une interpolation linéaire peut permettre une bonne estimation de la température entre 2 points qui ne sont pas trop éloignés dans le temps.
Je souhaiterais donc procéder, entre chaque point de donnée, à une interpolation linéaire pour générer de nouveau points et ainsi augmenter ma précision/diminuer mon pas de temps.

Je dispose du jeu de données en pièce jointe. Il s'agit de données de température, avec un pas de temps d'1h. Je souhaiterais procéder à une interpolation linéaire entre chaque point pour aboutir à un pas de temps de 10min.

Je dispose du code suivant:
Code :
1
2
T=read.table("TestInterpol.txt") 
approx(T$HrMn,T$Temp,method="linear",n=432)
Je souhaite en effet obtenir une valeur de température toutes les 10mins, pendant 3 jours, soit 432 valeurs au total pour ce jeu de données. D'où la valeur du "n".

Lorsque je lance la fonction, j'obtiens l'erreur suivante:
Code :
1
2
3
> approx(T$HrMn,T$Temp,method="linear",n=432) 
Erreur dans approx(T$HrMn, T$Temp, method = "linear", n = 432) : 
  il faut au moins deux valeurs non manquantes pour interpoler
Savez-vous d'où cela peut venir? Je ne comprends pas puisque pour chaque valeur de température, je dispose de l'heure de capture. Il n'y a donc pour moi aucune valeur manquante qui puisse poser problème pour l'interpolation.

Merci!
Fichiers attachés
Type de fichier : txt TestInterpol.txt (1,3 Ko, 0 affichages)
CupOfAppleTea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 18h43   #4
CupOfAppleTea
Invité de passage
 
Inscription : mars 2012
Messages : 44
Détails du profil
Informations forums :
Inscription : mars 2012
Messages : 44
Points : 2
Points : 2
Par défaut Interpolation Linéaire

Bonjour,
J'ai résolu un premier problème du au format de mon fichier de données en utilisant ce code:
Code :
T2=approx(as.numeric(T[-1, 2]),as.numeric(T[-1, 3]), method="linear", n=144)
Maintenant, je m'aperçois que la fonction approx ne fournit pas le résultat que j'attendais.
En effet, j'ai rentré dans la fonction "x=HrMn" qui correspond à l'heure de la journée et "y=Temp" qui correspond à mes valeurs de température.
Dans mon fichier brut, j'ai une valeur de température toutes les heures et je souhaite en sortie en avoir une toutes les 10min.
Or, je ne comprends pas très bien le fichier de sortie. Je m'attendais, pour une seule journée (de 0 à 2300 dans mon fichier brut) à obtenir quelque chose du type (avec n le nombre de valeurs de température):

Code :
1
2
3
4
5
6
7
8
9
10
11
HrMn Temp
0         13.4 (valeur que l'on retrouve dans mon fichier brut)
10        T1   (valeur calculée sur la base d'une interpolation)
20        T2
30        T3
40        T4
50        T5
100      13.1 (valeur que l'on retrouve dans mon fichier brut)          
....
2340    T(n-1)
2350    T(n)
Au lieu de ça, j'obtiens ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1	21
1.160839161	20.1958042
1.321678322	19.39160839
1.482517483	18.58741259
1.643356643	17.78321678
1.804195804	16.97902098
1.965034965	16.17482517
2.125874126	17.13286713
2.286713287	18.58041958
2.447552448	20.02797203
2.608391608	21.47552448
2.769230769	22.92307692
2.93006993	24.37062937
3.090909091	24.84848485
3.251748252	24.58041958
3.412587413	24.31235431
3.573426573	24.04428904
3.734265734	23.77622378
3.895104895	23.50815851
4.055944056	23.22144522
4.216783217	22.8997669
4.377622378	22.57808858
4.538461538	22.25641026
4.699300699	21.93473193
.....
A quoi correspond chacune des colonnes?
Auriez-vous une idée quant à la manière d'atteindre mon objectif?
Comment par exemple coupler l'heure et la date (dans le fichier, heure=HrMn; date=Date) pour que l'interpolation se fasse dans le temps et non pas seulement en considérant les valeurs extrêmes du vecteur x.

Merci.
CupOfAppleTea est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h27.


 
 
 
 
Partenaires

Hébergement Web