Я пытаюсь создать некоторые функции в R на основе этого короткого документа.
https://www.mesasoftware.com/papers/TheInverseFisherTransform.pdf
Сначала я нормализовал данные в диапазоне от -1 до 1. Затем я применяю уравнение. Проблема возникает, когда самые высокие и самые низкие значения становятся -Inf и Inf из функции нормализации.
> log((1 + +1) / (1 - +1))
[1] Inf
> log((1 + -1) / (1 - -1))
[1] -Inf
В настоящее время у меня есть:
set.seed(1234)
data <- rnorm(10000, mean = 10, sd = 20) # randomly generate some data
negPosOneNormalisation <- function(x){
2 * ((x - min(x)) / (max(x) - min(x))) - 1 # normalise data -1 and 1
}
normalised_data <- negPosOneNormalisation(data) # data is now between -1 and 1 bounds
FisherTransform <- function(x){
(0.5) * log((1 + x) / (1 - x)) # Apply equation (1) from paper
}
fisher_data <- FisherTransform(normalised_data)
sum(is.infinite(fisher_data)) # results give two Inf values
InverseFisherTransform <- function(x){
y = FisherTransform(x)
inv_y = (exp**(2*y) - 1) / (e**(2*y) + 1) # apply equation (2) from paper
}
InverseFisherTransform(fisher_data) # returns and error due to the Inf values
Как я могу применить такую нормализацию функция, где максимум не совсем равен -1 или +1, но может быть -0,9999 и +0,99999 или некоторое количество эпсилон выше или ниже крайних значений.
Я не хочу изменять входные данные, но что-то вроде следующие действия остаются в силе:
negPosOneNormalisation <- function(x){
2 * ((x +/- epsilon - min(x +/- epsilon)) / (max(x +/- epsilon) - min(x +/- epsilon))) - 1 # normalise data -1 and 1
}
Как применить эту функцию, чтобы избежать проблем -Inf и + Inf?