comment utiliser le Box-Cox transformation de puissance dans la R
J'ai besoin de transformer des données dans une "forme normale" et j'ai lu que de Box-Cox peut identifier les exposant à utiliser pour transformer les données.
Pour ce que j'ai compris
car::boxCoxVariable(y)
est utilisé pour les variables de réponse dans les modèles linéaires, et
MASS::boxcox(object)
pour une formule ou d'un modèle ajusté objet. Ainsi, parce que mes données sont la variable d'un dataframe, la seule fonction que j'ai trouvé que je pouvais utiliser est:
car::powerTransform(dataframe$variable, family="bcPower")
Est-ce exact? Ou ai-je raté quelque chose?
La deuxième question est de savoir quoi faire après je obtenir la
Estimated transformation parameters
dataframe$variable
0.6394806
Devrais-je simplement multiplier la variable par cette valeur?
Je l'ai fait:
aaa = 0.6394806
dataframe$variable2 = (dataframe$variable)*aaa
et puis-je exécuter le test de shapiro-wilks pour la normalité, mais encore une fois mes données ne semblent pas suivre une distribution normale:
shapiro.test(dataframe$variable2)
data: dataframe$variable2
W = 0.97508, p-value < 2.2e-16
OriginalL'auteur dede | 2015-11-30
Vous devez vous connecter pour publier un commentaire.
Box et Cox (1964) a proposé une famille de transformations conçu pour réduire nonnormality de la erreurs dans un modèle linéaire. Dans s'avère qu'en ce faisant, il réduit souvent la non-linéarité.
Voici un bon résumé de l'œuvre originale, et tout le travail qui a été fait depuis: http://www.ime.usp.br/~abe/lista/pdfm9cJKUmFZp.pdf
Vous l'aurez remarqué, cependant, que le logarithme de la vraisemblance régissant la sélection de la lambda puissance de transformation dépend de la somme résiduelle des carrés d'un modèle sous-jacent (pas de LaTeX sur -- voir la référence), donc pas de transformation peut être appliquée sans modèle.
Une application typique est la suivante:
Comme vous pouvez le voir ce n'est pas une balle magique, seulement certaines données peuvent être effectivement transformé (généralement un lambda inférieur à -2 ou supérieur à 2 est un signe que vous ne devriez pas être à l'aide de la méthode). Comme avec toute méthode statistique, à utiliser avec prudence avant de mettre en œuvre.
D'utiliser les deux paramètres de Box-Cox transformation, l'utilisation de la
geoR
paquet de trouver les lambdas:MODIFICATIONS: Amalgame de Tukey et de Box-Cox mise en œuvre comme l'a souligné @Yui-Shiuan fixe.
MASS
en utilisant le modèlelm(y ~ 1)
(dans ce cas,bc <- boxcox(variable ~ 1, data=dataframe)
).powerTransform()
donne le "droit" lambda, mais les données ont passe des choses qui font qu'il est impossible de forcer la normalité à l'aide seulement de Box-Cox.OriginalL'auteur mlegge
Selon le Box-cox transformation de la formule dans le livre Boîte,George E. P.; Cox,D. R.(1964). "Une analyse des transformations", je pense que mlegge post peut-être besoin d'être légèrement modifié.L'image y est (y^(lambda)-1)/lambda au lieu de y^(lambda). (En fait, y^(lambda) est appelée Tukey transformation, qui est un autre distincts de transformation de la formule.)
Donc, le code devrait être:
Plus d'informations
Mise en œuvre correcte de Box-Cox transformation de la formule en boxcox() dans R:
https://www.r-bloggers.com/on-box-cox-transform-in-regression-models/
Une bonne comparaison entre les Box-Cox de transformation et de Tukey transformation. http://onlinestatbook.com/2/transformations/box-cox.html
On pouvait aussi trouver le Box-Cox transformation de la formule sur Wikipedia:
en.wikipedia.org/wiki/Power_transform#Box.E2.80.93Cox_transformation
Veuillez me corriger si j'ai mal compris.
OriginalL'auteur Yun-Shiuan