2016-09-14 2 views
0

J'ai une chaîne dynamique pour créer un model.matrix. Valeur de la chaîne est la suivante:Erreur de contraste Model.matrix

total_matrix_str 
[1] "model.matrix(~ date + MDSE_ITEM_I + COLR_N + SLS_TYPE_GRP_C + dayofwk + 
MDSE_ITEM_REF_I + WK_END_D + GREG_D + SIZE_N + MDSE_STYL_N + COLR_FMLY_N + LATTD_I 
+ LNGTD_I + weekend + dsp + assort_size + colr_per + pctTillDate + weeknr + MEANTEMPM 
+ MEANVISM + MEANWINDSPDM + MAXHUMIDITY + MINHUMIDITY + MEANDEWPTM + MEANPRESSUREM 
+ FOG + RAIN + THUNDER ,data = total , 
contrasts.arg =list(MDSE_ITEM_I=contrasts(total$MDSE_ITEM_I,contrasts = F) , 
CO_LOC_I=contrasts(total$CO_LOC_I,contrasts = F) , 
COLR_N=contrasts(total$COLR_N,contrasts = F) , 
dayofwk=contrasts(total$dayofwk,contrasts = F) , 
SIZE_N=contrasts(total$SIZE_N,contrasts = F) , 
MDSE_STYL_N=contrasts(total$MDSE_STYL_N,contrasts = F) , 
COLR_FMLY_N=contrasts(total$COLR_FMLY_N,contrasts = F) , 
assort_size=contrasts(total$assort_size,contrasts = F) , 
weeknr=contrasts(total$weeknr,contrasts = F)))" 

Voici valeur distinctes compte des variables catégoriques:

> length(unique(total$MDSE_ITEM_I)) 
[1] 30 
> length(unique(total$CO_LOC_I)) 
[1] 5 
> length(unique(total$COLR_N)) 
[1] 6 
> length(unique(total$dayofwk)) 
[1] 7 
> length(unique(total$SIZE_N)) 
[1] 9 
> length(unique(total$MDSE_STYL_N)) 
[1] 6 
> length(unique(total$COLR_FMLY_N)) 
[1] 4 
> length(unique(total$assort_size)) 
[1] 7 
> length(unique(total$weeknr)) 
[1] 7 

encore ce résultat de commande en erreur comme suit:

total_matrix <- eval(parse(text = total_matrix_str)) 
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
    contrasts can be applied only to factors with 2 or more levels 

Les indices pourquoi Je pourrais avoir cette erreur? Comment résoudre les erreurs dynamiquement en détectant automatiquement un tel scénario?

+0

vérifier les valeurs 'NA' dans vos données ... –

+1

Vérifiez aussi probablement pour vous assurer qu'une des variables que vous pensez n'est pas un facteur est réellement un facteur (il y a beaucoup de variables dans cette formule qui hantent) J'ai semblé vérifier). – joran

+0

@joran Vérifié manquant catégorique des contrastes ont juste un ou deux niveaux, donc ne devrait pas y aller. Cependant, une aberration est une variable "SLS_TYPE_GRP_C" qui a une valeur STRING unique. Cela peut-il causer des problèmes? – abhiieor

Répondre

0

Ce problème vient en raison de la valeur unique unique d'une variable de chaîne. Dans les mots de Gregor "Toutes les variables non-entières/numériques auront des contrastes, soit les contrastes par défaut ou ceux que vous spécifiez Votre contrastes.arg remplace les contrastes par défaut pour certaines variables que vous spécifiez - toutes les autres variables catégorielles auront des contrastes par défaut". Ainsi, toutes les variables de facteur et de chaîne recevront inévitablement des contrastes, qui échoueront si un facteur ou une variable de type chaîne n'a qu'une valeur unique (même si les contrastes ne sont pas explicitement définis).