Je suis sûr que c'est le genre de problème que d'autres ont résolu à plusieurs reprises auparavant.
Un groupe de personnes va faire des mesures (consommation d'énergie domestique pour être exact). Tous le feront à différents moments et à différents intervalles.
Donc, ce que je vais obtenir de chaque personne est un ensemble de paires {date, valeur} où il y a des dates manquantes dans l'ensemble.
Ce dont j'ai besoin, c'est d'un ensemble complet de paires {date, valeur} où, pour chaque date dans la plage, une valeur est connue (mesurée ou calculée). Je m'attends à ce qu'une simple interpolation linéaire suffise pour ce projet.
Si je suppose que cela doit être fait dans Excel. Quelle est la meilleure façon d'interpoler dans un tel ensemble de données (j'ai donc une valeur pour chaque jour)?
Merci.
REMARQUE: Une fois ces ensembles de données terminés, je déterminerai la pente (c'est-à-dire l'utilisation par jour) et à partir de là, nous pourrons commencer à faire des comparaisons de domicile à domicile.
INFORMATIONS COMPLÉMENTAIRES Après quelques premières suggestions: Je ne veux pas déterminer manuellement où se trouvent les trous dans mon jeu de mesures (trop de jeux de mesures incomplets !!). Je cherche quelque chose (existant) automatique pour le faire pour moi. Donc, si mon entrée est
{2009-06-01, 10}
{2009-06-03, 20}
{2009-06-06, 110}
Ensuite, je m'attends à recevoir automatiquement
{2009-06-01, 10}
{2009-06-02, 15}
{2009-06-03, 20}
{2009-06-04, 50}
{2009-06-05, 80}
{2009-06-06, 110}
Oui, je peux écrire un logiciel qui fait ça. J'espère juste que quelqu'un a déjà une fonctionnalité de logiciel "prêt à fonctionner" (Excel) pour ce problème (plutôt générique).
La façon la plus simple de le faire est probablement la suivante:
Téléchargez le module complémentaire Excel ici: Fonctions supplémentaires XlXtrFun ™ pour Microsoft Excel
Utilisez la fonction intepolate (). = Interpoler ($ A $ 1: $ A $ 3, $ B $ 1: $ B $ 3, D1, FALSE, FALSE)
Les colonnes A et B doivent contenir votre entrée et la colonne G doit contenir toutes vos valeurs de date. La formule va dans la colonne E.
Je suis tombé sur cela et j'étais réticent à utiliser un complément, car il est difficile de partager la feuille avec des personnes qui n'ont pas installé le complément.
Mon officier a conçu une formule propre qui est relativement compacte (au prix d'un peu de magie).
A noter:
La formule fonctionne par:
MATCH
pour trouver la ligne dans la plage inputs
juste avant la valeur recherchée (par exemple, 3 est la valeur juste avant 3,5)OFFSET
s pour sélectionner le carré de cette ligne et la suivante (en violet clair)FORECAST
pour construire une interpolation linéaire en utilisant uniquement ces deux points, et obtenir le résultatCette formule ne peut pas faire d'extrapolations; assurez-vous que votre valeur de recherche est entre les points de terminaison (je le fais dans l'exemple ci-dessous en ayant des valeurs extrêmes).
Je ne sais pas si c'est trop compliqué pour les gens; mais il avait l'avantage d'être très portable (et plus simple que de nombreuses solutions alternatives).
Si vous souhaitez copier-coller la formule, c'est:
=FORECAST(F3,OFFSET(inputs,MATCH(F3,inputs)-1,1,2,1),OFFSET(inputs,MATCH(F3,inputs)-1,0,2,1
(inputs
étant une plage nommée)
Il existe deux fonctions, LINEST et TREND , que vous pouvez essayer de voir vous donne les meilleurs résultats. Ils prennent tous les deux des ensembles de X et Y connus avec une nouvelle valeur X et calculent une nouvelle valeur Y. La différence est que DROITEREG effectue une régression linéaire simple, tandis que TENDANCE essaiera d'abord de trouver une courbe qui correspond à vos données avant d'effectuer la régression.
La réponse ci-dessus par YGA ne gère pas les cas de fin de plage où la valeur X souhaitée est la même que la valeur X de la plage de référence. En utilisant l'exemple donné par YGA, la formule Excel retournerait # DIV/0! erreur si une valeur interpolée à 9999 a été demandée. Cela fait évidemment partie de la raison pour laquelle YGA a ajouté les points d'extrémité extrêmes de 9999 et -9999 à la plage de données d'entrée, puis suppose que toutes les valeurs prévues se situent entre ces deux nombres. Si un tel rembourrage n'est pas souhaité ou n'est pas possible, une autre façon d'éviter un # DIV/0! L'erreur consiste à vérifier la correspondance exacte de la valeur d'entrée à l'aide de la formule suivante:
=IF(ISNA(MATCH(F3,inputs,0)),FORECAST(F3,OFFSET(inputs,MATCH(F3,inputs)-1,1,2,1),OFFSET(inputs,MATCH(F3,inputs)-1,0,2,1)),OFFSET(inputs,MATCH(F3,inputs)-1,1,1,1))
où F3 est la valeur pour laquelle des résultats interpolés sont recherchés.
Remarque: j'aurais juste ajouté cela en tant que commentaire au message YGA d'origine, mais je n'ai pas encore assez de points de réputation.
Une belle façon graphique de voir à quel point vos résultats interpolés s’adaptent:
Prenez votre date, vos paires de valeurs et représentez-les graphiquement en utilisant le graphique XY dans Excel (pas le graphique linéaire). Cliquez avec le bouton droit sur la ligne résultante sur le graphique et cliquez sur "Ajouter une ligne de tendance". Il existe de nombreuses options différentes pour choisir le type d'ajustement de courbe à utiliser. Ensuite, vous pouvez accéder aux propriétés de la ligne de tendance nouvellement créée et afficher l'équation et la valeur R au carré.
Assurez-vous que lorsque vous formatez l'étiquette d'équation de la ligne de tendance, vous définissez le format numérique pour avoir un degré de précision élevé, afin que tous les chiffres significatifs des constantes d'équation soient affichés.
Vous pouvez trouver la formule qui correspond le mieux à vos données, en utilisant la fonction "ligne de tendance" d'Excel. En utilisant cette formule, vous pouvez calculer y
pour tout x
x
par la valeur x souhaitéeSur la capture d'écran ci-dessous A12: A16 contient x
, B12: B16 contient y
et C12 contient une formule qui calcule y
pour tout x
.
J'ai d'abord publié une réponse ici , mais j'ai ensuite trouvé cette question
alternativement.
=INDEX(yVals,MATCH(J7,xVals,1))+(J7-MATCH(J7,xVals,1))*(INDEX(yVals,MATCH(J7,xVals,1)+1)-INDEX(yVals,MATCH(J7,xVals,1)))/(INDEX(xVals,MATCH(J7,xVals,1)+1)-MATCH(J7,xVals,1))
où j7
est la valeur x.
xvals
est une plage de valeurs x yvals
est une plage de valeurs y
plus facile de mettre cela dans le code.