Nasıl düzeltilir? kontrastlar yalnızca 2 veya daha fazla düzeye sahip faktörlere uygulanabilir


R’de karşılaşabileceğiniz yaygın bir hata:

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

Bu hata, bir faktör veya özellik olan ve yalnızca tek bir benzersiz değere sahip bir tahmin değişkeni kullanarak bir regresyon modelini uydurmaya çalıştığınızda ortaya çıkar.

Bu eğitimde, bu hatayı çözmek için kullanabileceğiniz adımların tamamı paylaşılmaktadır.

Örnek: “Kontrastlar yalnızca 2 veya daha fazla düzeye sahip faktörlere uygulanabilir” sorununu düzeltme

R’de aşağıdaki veri çerçevesine sahip olduğumuzu varsayalım:

 #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

Tahmin değişkeni var2’nin bir faktör olduğunu ve yalnızca tek bir benzersiz değere sahip olduğunu unutmayın.

Tahmin değişkeni olarak var2’yi kullanarak çoklu doğrusal regresyon modelini uydurmaya çalışırsak aşağıdaki hatayı alırız:

 #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

Bu hatayı alıyoruz çünkü var2’nin yalnızca tek bir benzersiz değeri var: 4. Bu yordayıcı değişkende herhangi bir değişiklik olmadığından R, bir regresyon modeline etkili bir şekilde uyum sağlayamıyor.

Veri çerçevemizdeki her değişkenin benzersiz değerlerinin sayısını saymak için aslında aşağıdaki sözdizimini kullanabiliriz:

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

var1 var2 var3 var4 
   4 1 4 4 

Ve her değişkenin benzersiz değerlerinin her birini görüntülemek için lapply() işlevini kullanabiliriz:

 #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

Benzersiz değere sahip tek değişkenin var2 olduğunu görebiliriz. Dolayısıyla, var2’yi regresyon modelinden kaldırarak bu hatayı düzeltebiliriz:

 #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’yi regresyon modelinden çıkardığımızda artık önceki hatayla karşılaşmıyoruz.

Ek kaynaklar

R’de basit doğrusal regresyon nasıl gerçekleştirilir
R’de çoklu doğrusal regresyon nasıl gerçekleştirilir
R’de lojistik regresyon nasıl gerçekleştirilir

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir