Cara memperbaiki: kontras hanya dapat diterapkan pada faktor dengan 2 level atau lebih


Kesalahan umum yang mungkin Anda temui di R adalah:

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

Kesalahan ini terjadi ketika Anda mencoba menyesuaikan model regresi menggunakan variabel prediktor yang merupakan faktor atau sifat dan hanya memiliki satu nilai unik.

Tutorial ini membagikan langkah-langkah tepat yang dapat Anda gunakan untuk mengatasi kesalahan ini.

Contoh: Cara memperbaiki “kontras hanya dapat diterapkan pada faktor dengan 2 level atau lebih”

Misalkan kita memiliki bingkai data berikut di 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

Perhatikan bahwa variabel prediktor var2 merupakan faktor dan hanya memiliki satu nilai unik.

Jika kita mencoba menyesuaikan model regresi linier berganda menggunakan var2 sebagai variabel prediktor, kita akan mendapatkan kesalahan berikut:

 #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

Kita mendapatkan kesalahan ini karena var2 hanya memiliki satu nilai unik: 4. Karena tidak ada variasi dalam variabel prediktor ini, R tidak dapat menyesuaikan model regresi secara efektif.

Kita sebenarnya dapat menggunakan sintaks berikut untuk menghitung jumlah nilai unik untuk setiap variabel dalam bingkai data kita:

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

var1 var2 var3 var4 
   4 1 4 4 

Dan kita dapat menggunakan fungsi lapply() untuk menampilkan setiap nilai unik dari setiap variabel:

 #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

Kita dapat melihat bahwa var2 adalah satu-satunya variabel yang memiliki nilai unik. Jadi, kita dapat memperbaiki kesalahan ini hanya dengan menghapus var2 dari model regresi:

 #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

Dengan menghapus var2 dari model regresi, kita tidak lagi menemui kesalahan sebelumnya.

Sumber daya tambahan

Cara melakukan regresi linier sederhana di R
Cara melakukan regresi linier berganda di R
Bagaimana melakukan regresi logistik di R

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *