Мой ответ - начало полного взлома, но я не знаю ни одного устоявшегося способа сделать то, что вы просите.
Моим первым шагом было бы упорядочить ваш набор данных по рангу, вы можете найти пропорциональное положение в вашем наборе данных и затем преобразовать его в нормальное распределение, этот метод был использован в Reynolds & Hewitt, 1996. Смотрите пример кода R ниже в PROCMiracle.
Как только распределение нормальное, проблема перевернулась с ног на голову - вопрос корректировки эксцесса, но не перекоса. Поиск в Google показал, что можно выполнить процедуры John & Draper, 1980, чтобы скорректировать эксцесс, но не перекос, но я не мог воспроизвести этот результат.
Мои попытки разработать грубую функцию расширения / сужения, которая принимает входное (нормализованное) значение и добавляет или вычитает из него значение, пропорциональное положению переменной на нормальной шкале, приводит к монотонной корректировке, но на практике имеет тенденцию создавать бимодальное распределение, хотя и имеющее желаемые значения асимметрии и эксцесса.
Я понимаю, что это не полный ответ, но я подумал, что это может стать шагом в правильном направлении.
PROCMiracle <- function(datasource,normalrank="BLOM")
{
switch(normalrank,
"BLOM" = {
rmod <- -3/8
nmod <- 1/4
},
"TUKEY" = {
rmod <- -1/3
nmod <- 1/3
},
"VW" ={
rmod <- 0
nmod <- 1
},
"NONE" = {
rmod <- 0
nmod <- 0
}
)
print("This may be doing something strange with NA values! Beware!")
return(scale(qnorm((rank(datasource)+rmod)/(length(datasource)+nmod))))
}