R:计算Skew-T分布的特殊定义的概率密度函数

时间:2015-04-21 17:03:35

标签: r mixture-model

我目前正在处理混合模型包EMMIXskew,并且我在我的数据(一些数字向量)上拟合了偏斜分布。 该软件包有一些密度函数ddmst但我在这个软件包中没有看到概率密度函数,我需要一些!

我认为我能做的是

  1. 使用其他一些提供pdf进行偏斜分布的包, 像snpst,但问题是这个分布 对skew-t分布有不同的定义, 或者
  2. 我可以在integrate上使用ddmst,但到目前为止还没有。
  3. 我试过像

    这样的东西
    library(EMMIXskew)
    
    dat <- rdmst(n=1000,p=1,mean=0,cov=1,del=1)
    
    mu=0.01
    sigma=0.9
    nu=1.1
    del=3
    pdmst <- function(x){     
      ddmst(x,n=length(dat),p=1,mean=mu,cov=sigma,nu=nu,del=del)
    }
    
    x=0.6
    
    F_x <- integrate(pdmst,lower=-Inf,upper=x)
    

    如果我假设参数

    的数据是3模态的话
    mu=c(0.01,2,-0.4)
    sigma=c(0.9,2,2.3)
    nu=c(1.1,1,0.8)
    del=c(3,2,1.2)
    pdmst <- function(x){     
      ddmst(x,n=length(dat),p=1,mean=mu,cov=sigma,nu=nu,del=del)
    

    我收到此错误

    Error in ddmix(dat, n, p, 1, "mst", mean, cov, nu, del) : dat does not match n and p.

    我真的不知道自己做错了什么!

1 个答案:

答案 0 :(得分:1)

试试这个:

pdmst <- function(x){    
  ddmst(x,n=length(x),p=1,mean=mu,cov=sigma,nu=nu,del=del)
}

n应该是x而不是dat的长度。 然后pdmst(x)应该为您提供x的密度。

对于3组件的情况,请参阅ddmix的文档,了解如何指定此函数的参数。 对于您的第二个示例,可以按如下方式输入:

mu = cbind(0.01, 2, -0.4)
sigma = cbind(0.9,2,2.3)
del = cbind(3,2,1.2)
nu=c(1.1,1,0.8)
ddmix(x,1,1,3,"mst",mu, sigma, nu, del)

最后一个命令应该为您提供三个组件中每个组件的x密度的对数。