Ts中的连续变量的Tsallis熵

时间:2014-03-17 17:31:22

标签: r entropy information-theory

离散变量的

Tsallis entropy由:

定义
H[p,q] = 1/(q-1) * (1 - sum(p^q))

连续变量的Tsallis熵定义如下:

H[p,q] = 1/(q-1) * (1 - int((p(x)^q dx)

其中p(x)是数据的概率密度函数,int是不可或缺的。

我试图在R中实现Tsallis熵。

假设我有以下数据(由beta函数生成,但请考虑分布未知

set.seed(567)
mystring <- round(rbeta(500, 2,4), 2)

离散变量的Tsallis熵将是:

freqs <- table(mystring) / 500
q = 3
H1 <- 1/(q-1) * (1 - sum(freqs^q))
[1] 0.4998426

我现在想要计算连续变量的Tsallis熵:

PDF <- density(mystring)
library(sfsmisc)
xPDF <- PDF$x
yPDF <- PDF$y
H1 <- 1/(q-1) * (1 - integrate.xy(xPDF, yPDF^q))
[1] -0.6997353

正如我所料,这两个结果是不同的。但为什么如此不同? 我的主要问题是:用于计算连续变量的Tsallis熵的代码,对吗?请记住,我假设分发未知。

1 个答案:

答案 0 :(得分:1)

首先,这是一个统计问题。我鼓励你在stats.stackexchange.com上提问,你可能会得到更好的答案。

话虽如此,为什么你认为价值应该是一样的?您正在从β分布中获取大小为n(n = 500)的随机样本,并尝试通过计算每个大小为dx的k个区域(此处,dx = 0.01和k~100)中的观察分数来离散化它。通常,每个箱中的分数将取决于k,如

  

p i = p i o / k

其中p i o 是某些基线k = k o 的概率向量。换句话说,你拥有的箱子越多(越小),每箱的obxervations越少。您可以通过绘制具有不同k的直方图(使用breaks=k)来看到。

par(mfrow=c(1,3))
hist(mystring,breaks=10,  ylim=c(0,100))
hist(mystring,breaks=50,  ylim=c(0,100))
hist(mystring,breaks=100, ylim=c(0,100))

您的freqs向量为Frequency/500,但k的效果相同。数字箱当然等于k,所以

  

总和(p i )= 1

独立于k。但是在Tsallis熵的计算中,你没有求和p i ,你总结p i q (在你的情况下q = 3)。所以

  

sum(p i q )~sum([p i o / k] q )〜(1 / k q )* sum([p i o ] q

正弦表示你正在求和k项,当q = 1时,结果将不依赖于k,但对于任何其他q,总和将取决于k。换句话说,根据离散连续分布计算的Tsallis熵将取决于用于离散化的箱尺寸。

为了使这个具体化,考虑一个带有10个箱的离散U [0,1]。这是一个长度为10的向量,所有元素都是0.1。在您的示例中使用q = 3,

k <- 10
p <- rep(1/k,k)
sum(p^q)
# [1] 0.01

现在考虑使用100个箱子做同样的事情。这里p是长度为100的向量,所有元素都是0.01。

k <- 100
p <- rep(1/k,k)
sum(p^q)
# [1] 1e-04

最后考虑连续分布。 U [0,1]的pdf = 1(0,1),其他地方为0,因此积分为int(1 ^ 3 dx)= 1.

f <- function(x) dunif(x)^q
integrate(f,0,1)$value
# 1

最后,我们可以证明,整合你的经验密度函数(基于dbeta)给出与直接整合分布函数相同的答案:

library(sfsmisc)
PDF <- density(mystring)
H2 <- 1/(q-1) * (1 - integrate.xy(PDF$x, PDF$y^q))
H2
# [1] -0.6997353
g <- function(x) dbeta(x,2,4)^q
H3 <- 1/(q-1) * (1 - integrate(g,-Inf,Inf)$value)
H3
# [1] -0.8986014