To correct outlier problem, we can winsorise extreme values. Winsorize at the 1st and 99th percentile means values that are less than the value at 1st percentile are replaced by the value at 1st percentile, and values that are greater than the value at 99th percentile are replaced by the value at 99th percentile.
########################################################
# R Function for Outlier Treatment : Percentile Capping
########################################################
pcap <- function(x){for (i in which(sapply(x, is.numeric))) {quantiles <- quantile( x[,i], c(.05, .95 ), na.rm =TRUE)x[,i] = ifelse(x[,i] < quantiles[1] , quantiles[1], x[,i])x[,i] = ifelse(x[,i] > quantiles[2] , quantiles[2], x[,i])}x}# Replacing extreme values with percentilesabcd = pcap(mydata)# Checking Percentile values of 7th variablequantile(abcd[,7], c(0.25,0.5,.95, .99, 1), na.rm = TRUE)
Hey thanks for your post. I tried your code but it gave an error. I am trying to pass a data frame as an argument and winsorise each column. I copied your code and the following error was displayed:
ReplyDeleteError in check_names_df(j, x) : object 'i' not found
Any help would be appreciated. Thanks
Thanks for the code!!.... it worked well and helped me solving a great mess.
ReplyDelete