Lösung: kontraste können nur auf faktoren mit 2 oder mehr ebenen angewendet werden


Ein häufiger Fehler, der in R auftreten kann, ist:

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

Dieser Fehler tritt auf, wenn Sie versuchen, ein Regressionsmodell mithilfe einer Prädiktorvariablen anzupassen, die entweder ein Faktor oder ein Merkmal ist und nur einen eindeutigen Wert hat.

In diesem Tutorial werden die genauen Schritte erläutert, mit denen Sie diesen Fehler beheben können.

Beispiel: So beheben Sie „Kontraste können nur auf Faktoren mit 2 oder mehr Ebenen angewendet werden“

Angenommen, wir haben den folgenden Datenrahmen in R:

 #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

Beachten Sie, dass die Prädiktorvariable var2 ein Faktor ist und nur einen eindeutigen Wert hat.

Wenn wir versuchen, ein multiples lineares Regressionsmodell mit var2 als Prädiktorvariable anzupassen, erhalten wir die folgende Fehlermeldung:

 #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

Wir erhalten diesen Fehler, weil var2 nur einen eindeutigen Wert hat: 4. Da es keine Variation in dieser Prädiktorvariablen gibt, ist R nicht in der Lage, ein Regressionsmodell effektiv anzupassen.

Wir können tatsächlich die folgende Syntax verwenden, um die Anzahl der eindeutigen Werte für jede Variable in unserem Datenrahmen zu zählen:

 #count unique values for each variable
sapply( lapply (df, unique), length)

var1 var2 var3 var4 
   4 1 4 4 

Und wir können die Funktion lapply() verwenden, um jeden der eindeutigen Werte jeder Variablen anzuzeigen:

 #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

Wir können sehen, dass var2 die einzige Variable ist, die einen eindeutigen Wert hat. Wir können diesen Fehler also beheben, indem wir einfach var2 aus dem Regressionsmodell entfernen:

 #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

Durch das Entfernen von var2 aus dem Regressionsmodell tritt der vorherige Fehler nicht mehr auf.

Zusätzliche Ressourcen

So führen Sie eine einfache lineare Regression in R durch
So führen Sie eine multiple lineare Regression in R durch
So führen Sie eine logistische Regression in R durch

Einen Kommentar hinzufügen

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