如何估计反双曲正弦变换的 theta?

机器算法验证 r 数据转换
2022-04-01 19:06:37

我需要 R 代码的帮助来估计反双曲正弦变换的 theta。此转换对于转换包含负值或零的倾斜数据很有用。

有一些相关的帖子讨论了 IHS,并建议有一种最大可能性的方法来估计 theta,但我不知道如何应用它。这些相关的帖子是:

请参阅下面的示例代码。我通过使用 IHS 的倒数制作了倾斜的数据。现在,考虑到偏斜的数据,并且没有关于 theta 的先验知识,我该如何计算出 theta 应该是什么?我将非常感谢 R 代码进行此分析。

# Define the IHS transformation and its inverse
IHS <- function(x, theta){  # Inverse IHS transformation
  (1/theta)*asinh(theta * x)
}

Inv.IHS <- function(x, theta){  # IHS transformation
  (1/theta)*sinh(theta * x)
}

set.seed(1)
# generate some normal data
x <- rnorm(1000)
hist(x, breaks='FD')

# skew it by applying the Inverse of the IHS transformation
xt <- Inv.IHS(x, theta=2)
hist(xt, breaks='FD') # yep this is skewed.  How could we estimate theta?

使用 IHS 的逆来倾斜数据

1个回答

经过几天的思考,我有两个暂定的答案。

  1. 选择 theta 以使转换后的数据接近拟合优度所测量的正常值。例如,选择 theta 来最大化 Shapiro-Wik 检验的 p 值。

    set.seed(1)
    x <- rnorm(1000)
    xt <- Inv.IHS(x, theta=2)
    
    Shapiro.test.pvalue <- function(theta, x){ 
      x <- IHS(x, theta) 
      shapiro.test(x)$p.value 
    }
    
    optimise(Shapiro.test.pvalue, lower=0.001, upper=50, x=xt, maximum=TRUE)  # 2.069838
    
  2. theta 的最大似然估计。

    查看Burbidge 等人的论文。我认为单个变量的似然函数可以表示如下。

    IHS.loglik <- function(theta,x){
    
      IHS <- function(x, theta){  # function to IHS transform
      asinh(theta * x)/theta
    }
    
    n <- length(x)
    xt <- IHS(x, theta)
    
    log.lik <- -n*log(sum((xt - mean(xt))^2))- sum(log(1+theta^2*x^2))
    return(log.lik)
    }     
    
    # try this on our data
    optimise(IHS.loglik, lower=0.001, upper=50, x=xt, maximum=TRUE) # 2.0407
    

在这两种情况下,我们都接近预期的 theta,这是令人鼓舞的。但是当我对我的真实数据尝试最大似然方法时,它似乎并没有给出合理的答案。