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