2015-09-11 9 views
1

Я пытался запустить некоторые entropy() расчетов по данным платформы Force и я получаю предупреждение:Правильно настройка энтропия Расчета Шеннона в R

> 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() пытается взять log отрицательного числа. Я также знаю, что R может выполнять сложные номера, используя complex(), однако мне не удалось добиться его работы с моими данными. Я не получил эту ошибку по моим данным CoPy, а только данные CoPx, так как силовая платформа получает данные Центра давления в двух измерениях. Кто-нибудь есть предложения по поводу получения complex() для работы с моим набором данных или есть еще одна функция, которая будет работать лучше, чтобы попытаться получить правильный расчет энтропии? Энтропия не должна быть намного выше в CoPx по сравнению с CoPy. Я также попробовал это с некоторыми другими наборами данных из других предметов, и то же самое появилось, меры энтропии CoPx дали мне предупреждающие сообщения, а измерения CoPy не были. Я привязываю ссылку на набор данных, чтобы каждый мог попробовать ее сам и посмотреть, смогут ли они понять это, поскольку данные немного длиннее, чтобы просто вставлять их здесь.

Data

Edit: Правильный ответ

Как было предложено, я попробовал функцию table(...) и получил не предупреждение/ошибки и выход энтропии было также ожидаемые в диапазоне, а также. Однако я, по-видимому, не заметил функции в пакете discretize(), и именно это вы должны использовать для правильной настройки данных для расчета энтропии.

+1

, с какой энтропией вы говорите? Пожалуйста, отредактируйте это на [mcve], чтобы другие могли помочь – Stedy

+0

@Stedy Отредактировано для включения библиотеки энтропии, которую я использую. –

ответ

3

Я думаю, что нет смысла применять функцию entropy к вашим данным. Согласно ?entropy, это

оценки энтропии Шеннона Н случайной величины Y из соответствующего наблюдается у отсчитывает

(курсив мой). Это означает, что вам необходимо преобразовать ваши данные (которые, как представляется, являются непрерывными), чтобы сначала подсчитывать данные, например, путем их бинирования.

+0

Вы имеете в виду, разрезая его на меньшие интервалы? Опубликованные данные составляют 60 секунд 1 пробной версии. В некоторых отчетах они разделили этот тип данных на 20-секундные интервалы за период, поэтому посмотрите, как он изменяется в течение периода сбора данных. Скажите, 20 секунд, 40 секунд, 60 секунд ....... и т. Д. –

+0

Я не знаком с вашим конкретным методом сбора данных, но просто просматривая данные, кажется, что они непрерывны. Мое замечание состояло в том, что вы измеряли * измеренные значения *, а не о расщеплении временной оси. – krlmlr

+0

Я попытался использовать функцию 'shingles()' из пакета решетки, 'equal.count()' и метод из [вопроса binning] (http://stackoverflow.com/questions/24359863/binning-data- in-r), и никто не избавился от предупреждающего сообщения. Есть ли другой метод биннинга, который я не пробовал? –