【问题标题】:Correctly setting up Shannon's Entropy Calculation in R在 R 中正确设置香农熵计算
【发布时间】:2015-09-11 19:17:42
【问题描述】:

我试图对 Force Platform 数据运行一些 entropy() 计算,但收到一条警告消息:

> library(entropy)
> d2 <- read.csv("c:/users/SLA9DI/Documents/data2.csv")
> entropy(d2$CoPy, method="MM")
[1] 10.98084
> entropy(d2$CoPx, method="MM")
[1] 391.2395
Warning message:
In log(freqs) : NaNs produced

我确定这是因为entropy() 正在尝试记录负数。我也知道 R 可以使用 complex() 来处理复数,但是我没有成功让它与我的数据一起使用。我的 CoPy 数据没有出现这个错误,只有 CoPx 数据,因为力平台获取二维的压力中心数据。有没有人对让complex() 处理我的数据集有任何建议,或者是否有其他函数可以更好地尝试获得正确的熵计算?与 CoPy 相比,CoPx 中的熵不应该大得多。我还尝试了来自其他受试者的更多数据集,并且出现了同样的情况,CoPx 熵测量给了我警告信息,而 CoPy 测量没有。我附上了一个数据集链接,这样任何人都可以自己尝试一下,看看他们是否能弄清楚,因为数据有点长,无法发布到这里。

Data

编辑:正确答案

按照建议,我尝试了 table(...) 函数并没有收到任何警告/错误消息,并且熵输出也在预期范围内。但是,我显然忽略了包 discretize() 中的一个函数,这就是你应该用来正确设置熵计算数据的函数。

【问题讨论】:

  • 你说的是哪个熵函数?请将此编辑为minimal reproducible example,以便其他人可以提供帮助
  • @Stedy 已编辑以包含我正在使用的熵库。

标签: r complex-numbers entropy


【解决方案1】:

我认为对您的数据应用entropy 函数没有意义。根据?entropy,它

根据相应的观察计数 y

估计随机变量 Y 的香农熵 H

(强调我的)。这意味着您需要先将数据(似乎是连续的)转换为对数据进行计数,例如通过分箱。

【讨论】:

  • 你的意思是把它切成更小的间隔吗?发布的数据是 1 次试验的 60 秒。在一些报告中,他们将这种类型的数据在一段时间内分成 20 秒的间隔,因此请查看它在数据收集期间的变化情况。比如说 20 秒、40 秒、60 秒……等等。
  • 我不熟悉你特定的数据收集方法,但只是看数据似乎它们是连续的。我的评论是关于对 测量值 进行分箱,而不是关于拆分时间轴。
  • 我尝试使用 lattice 包中的 shingles() 函数 equal.count()a binning question 中的方法,但都没有摆脱警告消息。还有其他我没有尝试过的分箱方法吗?
  • @technos_eric:试试cut()
  • 忘记了——您需要将结果制成表格以获得计数数据,例如,table(cut(...))
猜你喜欢
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多