Oplossing: contrasten kunnen alleen worden toegepast op factoren met 2 of meer niveaus
Een veel voorkomende fout die u in R kunt tegenkomen is:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]): contrasts can be applied only to factors with 2 or more levels
Deze fout treedt op wanneer u probeert een regressiemodel te fitten met behulp van een voorspellende variabele die een factor of een eigenschap is en slechts één unieke waarde heeft.
In deze zelfstudie worden de exacte stappen beschreven die u kunt gebruiken om deze fout op te lossen.
Voorbeeld: Oplossen van “contrasten kunnen alleen worden toegepast op factoren met 2 of meer niveaus”
Stel dat we het volgende dataframe in R hebben:
#create data frame df <- data. frame (var1=c(1, 3, 3, 4, 5), var2=as. factor (4), var3=c(7, 7, 8, 3, 2), var4=c(1, 1, 2, 8, 9)) #view data frame df var1 var2 var3 var4 1 1 4 7 1 2 3 4 7 1 3 3 4 8 2 4 4 4 3 8 5 5 4 2 9
Merk op dat de voorspellende variabele var2 een factor is en slechts één unieke waarde heeft.
Als we proberen een meervoudig lineair regressiemodel te fitten met var2 als voorspellende variabele, krijgen we de volgende foutmelding:
#attempt to fit regression model
model <- lm(var4 ~ var1 + var2 + var3, data=df)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]):
contrasts can be applied only to factors with 2 or more levels
We krijgen deze fout omdat var2 slechts één unieke waarde heeft: 4. Omdat er geen variatie is in deze voorspellende variabele, kan R niet effectief in een regressiemodel passen.
We kunnen feitelijk de volgende syntaxis gebruiken om het aantal unieke waarden voor elke variabele in ons dataframe te tellen:
#count unique values for each variable sapply( lapply (df, unique), length) var1 var2 var3 var4 4 1 4 4
En we kunnen de functie lapply() gebruiken om elk van de unieke waarden van elke variabele weer te geven:
#display unique values for each variable
lapply(df[c('var1', 'var2', 'var3')], unique)
$var1
[1] 1 3 4 5
$var2
[1] 4
Levels: 4
$var3
[1] 7 8 3 2
We kunnen zien dat var2 de enige variabele is die een unieke waarde heeft. We kunnen deze fout dus corrigeren door eenvoudigweg var2 uit het regressiemodel te verwijderen:
#fit regression model without using var2 as a predictor variable model <- lm(var4 ~ var1 + var3, data=df) #view model summary summary(model) Call: lm(formula = var4 ~ var1 + var3, data = df) Residuals: 1 2 3 4 5 0.02326 -1.23256 0.91860 0.53488 -0.24419 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 8.4070 3.6317 2.315 0.1466 var1 0.6279 0.6191 1.014 0.4172 var3 -1.1512 0.3399 -3.387 0.0772 . --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 1.164 on 2 degrees of freedom Multiple R-squared: 0.9569, Adjusted R-squared: 0.9137 F-statistic: 22.18 on 2 and 2 DF, p-value: 0.04314
Door var2 uit het regressiemodel te verwijderen, komen we de vorige fout niet meer tegen.
Aanvullende bronnen
Hoe eenvoudige lineaire regressie uit te voeren in R
Hoe meervoudige lineaire regressie uit te voeren in R
Hoe logistische regressie uit te voeren in R