Je voudrais écrire une fonction (de préférence dans R, mais d'autres langues sont les bienvenus), qui identifierait les relations entre les colonnes (limité à des additions/soustractions) dans un jeu de données. Une application pratique de ce serait de l'exécuter sur grands ensembles de données financières à plusieurs colonnes, où certaines des colonnes sont des sous-totaux d'autres colonnes - et identifier les sous-totaux.Comment identifier les colonnes qui sont des sommes d'autres colonnes dans un jeu de données
Idéalement, je voudrais permettre à des petits écarts - par exemple pour permettre des problèmes d'arrondi conduisant à des colonnes ne totalisant pas exactement 100%.
J'ai trouvé le question qui inclut une solution impliquant des matrices et des rangs, mais je ne suis pas sûr s'il y a un moyen d'incorporer la capacité de gérer le bruit dans les données découlant des problèmes d'arrondi.
À titre d'exemple:
d = data.frame(a=c(10.12, 20.02, 30.08, 20.19), b=c(12.12, 20.45, 20.52, 16.72), c=c(11, 123.25, 20.67, 20.78))
d$d = d$a + d$b
d$e = d$d + d$c
> d
a b c d e
1 10.12 12.12 11.00 22.24 33.24
2 20.02 20.45 123.25 40.47 163.72
3 30.08 20.52 20.67 50.60 71.27
4 20.19 16.72 20.78 36.91 57.69
magic_function(d)
[1] "d$d = d$a + d$b"
[2] "d$e = d$d + d$c" # or "d$e = d$a + d$b + d$c" (first option preferred)
La solution dans la question liée fonctionne bien jusqu'à ce que je présente le bruit dans l'équation. par exemple. d$d[[4]] = d$d[[4]] + 0.01
- alors ça ne marche plus du tout. Ma question est donc:
- Existe-t-il d'autres méthodes pour identifier les relations entre les colonnes (surtout si elles sont limitées à de simples addition/soustraction)
- Est l'une des méthodes capables de répondre à la données imparfaite problème de qualité ou ai-je besoin de construire des fonctionnalités supplémentaires pour elle (par exemple autour des données avant de l'exécuter par l'algorithme d'identification de rang).
Une réponse partielle est d'utiliser 'lm'. Cela devrait au moins renvoyer les variables qui sont des combinaisons linéaires d'autres comme NA 'summary (lm (rnorm (4) ~., Data = d))' par exemple. – lmo
@lmo corrigez-moi si je me trompe, mais lm nécessite de connaître la (les) variable (s) dépendante (s) - dans ce cas, je ne sais pas ce qui dépend et ce qui est indépendant .. – Aurimas
Cela est vrai en théorie et peut-être suis-je abuser de la fonction, mais notez que j'ai ajouté un échantillon aléatoire de la distribution normale standard en tant que variable dépendante. Maintenant, les covariables (les variables "indépendantes") sont évaluées quant à leur colinéarité. Si trop proche, alors 'lm' renvoie un NA. Je crois (sur la base d'un post SO précédent) que les covariables sont sélectionnées dans l'ordre d'une plus grande «indépendance», de sorte que celles qui sont les plus colinéaires sont exclues des résultats de la régression. – lmo