해결 방법: 대비는 수준이 2개 이상인 요인에만 적용할 수 있습니다.


R에서 발생할 수 있는 일반적인 오류는 다음과 같습니다.

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

이 오류는 요인 또는 특성이고 고유한 값이 하나만 있는 예측 변수를 사용하여 회귀 모델을 적합시키려고 할 때 발생합니다.

이 튜토리얼에서는 이 오류를 해결하는 데 사용할 수 있는 정확한 단계를 공유합니다.

예: “대비는 수준이 2개 이상인 요인에만 적용할 수 있습니다” 수정 방법

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

예측 변수 var2 는 요인이며 고유한 값이 하나만 있습니다.

var2를 예측 변수로 사용하여 다중 선형 회귀 모델을 맞추려고 하면 다음 오류가 발생합니다.

 #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

var2 에는 단 하나의 고유 값(4)만 있기 때문에 이 오류가 발생합니다. 이 예측 변수에는 변동이 없기 때문에 R은 회귀 모델을 효과적으로 적합할 수 없습니다.

실제로 다음 구문을 사용하여 데이터 프레임의 각 변수에 대한 고유 값 수를 계산할 수 있습니다.

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

var1 var2 var3 var4 
   4 1 4 4 

그리고 lapply() 함수를 사용하여 각 변수의 고유한 값을 각각 표시할 수 있습니다.

 #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

var2 가 고유한 값을 갖는 유일한 변수임을 알 수 있습니다. 따라서 회귀 모델에서 var2를 제거하면 이 오류를 수정할 수 있습니다.

 #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

회귀 모델에서 var2를 제거하면 더 이상 이전 오류가 발생하지 않습니다.

추가 리소스

R에서 단순 선형 회귀를 수행하는 방법
R에서 다중 선형 회귀를 수행하는 방법
R에서 로지스틱 회귀를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다