所以首先,这是一个统计问题。我鼓励您在stats.stackexchange.com上提问,在那里您可能会得到更好的答案。
话虽如此,您为什么认为这些值应该相同?您正在从 beta 分布中抽取大小为 n (n = 500) 的随机样本,并尝试通过计算每个 k 个大小为 dx 的 bin(此处为 dx = 0.01 和 k ~ 100)中的观察分数来对其进行离散化。通常,每个 bin 中的分数将取决于 k,如
p i = p i o / k
其中 p i o是某个基线 k = k o的概率向量。换句话说,您拥有的垃圾箱越多(越小),每个垃圾箱的观察次数就越少。您可以通过绘制具有不同 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 的效果是一样的。bins 的数量当然等于 k,所以
总和( p i ) = 1
与 k 无关。但是在计算 Tsallis 熵时,您不是在求和 p i,而是在求和 p i q(在您的情况下 q=3)。所以
总和( p我q) ~ 总和( [ p我o /k ] q) ~ (1 / k q ) * sum( [ p我o ] q )
正弦你正在对 k 项求和,当 q = 1 时,结果将不取决于 k,但对于任何其他 q,总和将取决于 k。换句话说,从离散化连续分布计算的 Tsallis 熵将取决于用于离散化的 bin 大小。
为了具体化,考虑一个具有 10 个 bin 的离散化 U[0,1]。这是一个长度为 10 的向量,所有元素 = 0.1。在您的示例中使用 q=3 ,
k <- 10
p <- rep(1/k,k)
sum(p^q)
# [1] 0.01
现在考虑 100 个 bin 的情况。这里 p 是一个长度为 100 的向量,所有元素 = 0.01。
k <- 100
p <- rep(1/k,k)
sum(p^q)
# [1] 1e-04
最后考虑连续分布。U[0,1] = 1 on (0,1), 0 其他地方的 pdf,所以积分是 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