2016-02-24 2 views
2

Je ne suis pas sûr de comprendre complètement comment les facteurs fonctionnent. Donc s'il vous plaît corrigez-moi d'une manière facile à comprendre si je me trompe. J'ai toujours supposé qu'en faisant des régressions et quoi que ce soit, R dans les coulisses orchestre des variables catégorielles en entiers, mais cette partie était en dehors de mon train de pensée.Niveaux de facteurs cohérents pour la même valeur sur différents jeux de données

Il utiliserait les valeurs catégorielles dans un ensemble d'apprentissage et, après la construction d'un modèle, vérifierait la même valeur catégorique dans l'ensemble de données de test. Quels que soient les «niveaux» sous-jacents - cela ne m'intéressait pas.

Cependant, j'ai réfléchi plus ... et j'ai besoin de clarification - surtout si je me trompe sur la façon de le réparer.

 train= c("March","April","January","November","January") 
    train=as.factor(train) 
    str(train) 
    Factor w/ 4 levels "April","January",..: 3 1 2 4 2 

    test= c(c("March","April")) 
    test=as.factor(test) 
     str(test) 
    # Factor w/ 2 levels "April","March",..: 1 2 

question

Si vous voyez ce qui précède, il crée des niveaux de facteur, je crois ce qu'ils sont appelés pour chaque mois. Cependant, les niveaux ne correspondent pas nécessairement. Par exemple, dans le test "APRIL" est "1" dans les deux, mais dans le train "JANUARY" est 2 alors que "MARCH" est 2 dans le 2ème. Si je devais incorporer ceci dans un modèle, je ne pense pas que j'obtiendrais une erreur puisque toutes les valeurs catégoriques dans l'ensemble de TEST sont déjà dans l'ensemble d'entraînement ... mais aurions des coeffecients/valeurs appropriés être utilisé?

s'il vous plaît aider je suis très confus

Répondre

4

Lorsque vous utilisez as.factor pour convertir/contraindre un vecteur dans un facteur, R prend toutes les valeurs uniques de votre vecteur et associe un identifiant numérique à chacun d'eux; il a également une méthode de tri par défaut pour décider quelle valeur obtient 1, 2 etc.

Si vous avez différents vecteurs qui vivent dans un "univers" commun de valeurs et que vous voulez les convertir en facteurs cohérents (ie une valeur apparaissant dans différents vecteurs/DSF est associé au même identifiant numérique), faites ceci:

x <- letters[1:5] 
y <- letters[3:8] 
allvalues <- unique(union(x,y)) # superfluous but I think it adds clarity 
x <- factor(x, levels = allvalues) 
y <- factor(y, levels = allvalues) 
str(x) # Factor w/ 8 levels "a","b","c","d",..: 1 2 3 4 5 
str(y) # Factor w/ 8 levels "a","b","c","d",..: 3 4 5 6 7 8 

Modifier

Une petite expérience pour montrer que R est assez intelligent pour reconnaître les valeurs des facteurs dans des vecteurs différents, même si on leur a attribué des identifiants numériques incohérents:

y <- sample(1:2, size = 20, replace = T) 
x <- factor(letters[y], levels = c("b","a")) # so a~2 and b~1 
y <- y + rnorm(0, 0.2, n = 20) 
Set <- data.frame(x = x, y = y) 
fit <- lm(data = Set, y ~ x) 

Pour obtenir une description de tout: str(x), str(y), summary(fit).

Ainsi fit est formé pour associer x = a (qui en tant que facteur a une étiquette numérique de 2) avec la valeur y ~= 1 et y = b avec la valeur x ~= 2.

Maintenant, nous allons faire un ensemble de test "confusion":

x2 <- factor(c("a","b"), levels = c("c","d","a","b")) 
str(x2) # Factor w/ 4 levels "c","d","a","b": 3 4 

Utilisons predict pour voir ce que R fait de celui-ci:

predict(fit, newdata = data.frame(x = x2)) 
#  1  2 
# 1.060569 1.961109 

Ce qui est ce que nous nous attendons à de R .. .

+0

Nous vous remercions de votre réponse rapide. C'est une méthode très utile pour le faire. Cependant, je suppose que oui, en effet quand vous avez l'univers commun des valeurs dans chacun, alors que le code pourrait fonctionner sans erreur, les coefficients-facteurs inappropriés seraient utilisés dans la régression? Ce serait le cas lorsque le test-set est juste un sous-ensemble des facteurs dans l'ensemble de formation, potentiellement avec différents ordres de tri alphanumériques (mon exemple ci-dessus). – runningbirds

+0

Qu'appelez-vous "coefficients-facteurs inappropriés"? Si votre variable factor est utilisée comme variable d'entrée dans une régression, les identifiants numériques associés à chaque valeur de facteur ne sont pas utilisés de toute façon, R crée simplement des variables fictives (par exemple si X = c ("a", "b", "c" , "d"), R choisit une valeur de base, par exemple "a", et crée (sans vous le dire), les variables X-is-b = (0,1,0,0), X-is- c = (0,0,1,0) et X-is-d = (0,0,0,1) et les utilise comme entrée pour la régression). –

+0

Ce que je veux dire dans mon exemple, c'est que dans la partie 'test' March == 2 et dans la partie 'train' March == 3 – runningbirds