Bir faktördeki tüm düzeylerin oranı bir eşiğin altında olan bir faktörün seviyelerini birleştirecek olan R'de bir paket / fonksiyon boyunca herkesin çalışıp çalışmadığını merak ediyor musunuz? Özellikle, veri hazırlamanın ilk adımlarından biri, toplamın en az% 2'sini oluşturmayan seyrek faktör düzeylerini ('Diğer' adı verilen bir seviyeye) birlikte çöktürmektir. Bu denetimsiz olarak yapılır ve hedef pazarlamadaki bazı faaliyetleri modellemek olduğunda yapılır (bu çok küçük olayların son derece önemli olabileceği sahtekarlık tespiti değil). Bazı eşik oranları karşılanana kadar seviyeleri daraltacak bir işlev arıyorum.
GÜNCELLEME:
Bu harika öneriler sayesinde kolayca bir fonksiyon yazdım. Seviyeleri <en düşük oranla daraltmanın mümkün olduğunu fark ettim ve yine de en düşük oranın en düşük seviyeye eklenmesini gerektiren en düşük seviyenin <minimum olması gerekir. Muhtemelen daha verimli olabilir ama işe yarıyor gibi görünüyor. Bir sonraki geliştirme, daralma mantığını yeni verilere (bir doğrulama seti veya gelecekteki veriler) uygulamak için "kuralların" nasıl yakalanacağını bulmak olacaktır.
collapseFactors<- function(tableName,minPercent=5,fillIn ="RECODED" )
{
for (i in 1:ncol(tableName))
{
if(is.factor(tableName[,i]) == TRUE) #process just factors
{
sortedTable<-sort(prop.table(table(tableName[,i])))
numberToCollapse<-length(sortedTable[sortedTable<(minPercent/100)])
if (sum(sortedTable[1:numberToCollapse])<(minPercent/100))
{
numberToCollapse=numberToCollapse+1 #add next level if < minPercent
}
if(numberToCollapse>1) #if not >1 then nothing to collapse
{
lf <- names(sortedTable[1:numberToCollapse])
levels(tableName[,i])[levels(tableName[,i]) %in% lf] <- fillIn
}
}#end if a factor
}#end for loop
return(tableName)
}#end function