2017-01-03 1 views
-3

J'ai ajusté un polynôme multivarié en utilisant les fonctions lm() et step() dans R. Mes données ont la variable dépendante Y et quelques variables indépendantes X1 jusqu'à Xn. J'ai formaté la formule pour s'adapter comme suit: Y ~ I (X1^1) + I (X1^2) + I (X2^1) + ... etc. Quand j'utilise la fonction predict() sur les données d'origine tout fonctionne, même sur les points de validation qui n'ont pas été utilisés pour l'ajustement. Mais, je dois utiliser la fonction predict() sur certaines données simulées que j'ai produites. Je me suis assuré que les données simulées sont dans un data.frame et tous les éléments sont de type double comme les données d'origine. J'ai copié les noms des colonnes à partir des données d'origine (X1, ..., Xn) vers les données simulées. Maintenant, lorsque j'utilise la fonction predict(), j'obtiens l'erreur suivante:Erreur ("variables avec différents types de l'ajustement") lors de l'utilisation de la fonction predict() dans R

Error: variables ‘I(X1^1)’, ‘I(X1^2)’, ‘I(X2^1)’ were specified with different types from the fit

Je ne comprends vraiment pas. Les noms de colonnes sont les mêmes, les types sont les mêmes et les données originales et simulées sont dans un data.frame. Que se passe-t-il ici?

Merci d'avance !!

Répondre

0

Désolé de ne pas fournir un exemple reproductible. Mais j'ai trouvé une solution. Ce n'est pas très élégant mais c'est ici. Lorsque je force le data.frame avec les données d'origine à une matrice, puis de nouveau directement à une trame de données, certains attributs et d'autres éléments sont coupés des données d'origine. Si j'utilise maintenant ce data.frame pour le processus d'ajustement, la fonction predict() fonctionne également sur les données simulées. Les données simulées étaient d'abord au format matriciel et converties en un data.frame. Il n'est toujours pas clair pour moi s'il n'y a pas une façon plus élégante de se débarrasser de l'attr, des dimensions et d'autres choses dans le data.frame des données d'origine. J'ai essayé unname() mais ça n'a pas marché.