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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert