2015-10-26 2 views
0

У меня есть файл test.xlsx, для которого ссылка может быть найдена ниже. Это диаграмма diagramОбнаружение изменений в массиве данных

Согласно диаграмме, после 62-й точки диаграмма имеет сдвиг вверх. Есть ли способ, которым мы можем распознать этот момент посредством обработки изображений?

Я использовал medfilt1(list,5) (link) в MATLAB с окнами разного размера, но результат был не очень хорошим.

Не могли бы вы дать мне какие-либо советы или комментарии?

https://drive.google.com/file/d/0B5QzBOKhSsdgY3Juc3BlaDVuaTA/view?usp=sharing

+0

Пожалуйста, добавьте [mcve] ваш код. – Adriaan

+0

Я не могу найти документацию для 'medfit1', где вы нашли эту функцию. – Daniel

+0

Есть ли конкретная причина для обработки изображений для этой задачи? – Daniel

ответ

0

Смотрите ниже код. Код проводит статистическое сравнение, используя ztest, между скользящим средним данных (индекс-k: индекс) и данными (индексом). Ссылка на ztest: here. ztest тесты для нулевой гипотезы, что data(index) = mean(data(index-k:index)). Если ztest возвращает h=1, нулевая гипотеза отклоняется, в результате чего data(index) <> mean(data(index-k:index)). В случае с вашими данными, ztest будет обнаруживать переключения на более высокие или пониженные значения w.r.t. заданный уровень alpha.

Попробуйте этот код с вашими данными. Код alpha=0.05, код может обнаружить изменения на index = 48 и index = 66. Это места, где происходит переключение (или понижение). Обратите внимание, что описанная выше перестройка происходит в index=66 и НЕ на index=62, как вы заявляли.

Также попробуйте использовать разные значения alpha и k.

data=xlsread('test.xlsx'); 
m = length(data); 

start_index = 11; 
alpha = 0.05; 
k = 10; 

h_array = zeros(length(data),1); 

for index = start_index:m 
    avg = mean(data(index-k:index)); 
    stdev = std(data(index-k:index)); 
    if index > start_index   
     val = data(index); 
     h = ztest(val,avg,stdev,'alpha',alpha); 
     h_array(index) = h; 
    end 
end 
+0

Я должен добавить, если вы хотите обнаружить изменение в 'index = 62', вам нужно знать значения' data (62:66) '. Это связано с тем, что переключение происходит во время «данных (62:66)». Также обратите внимание, что 'data = xlsread ('test.xlsx')', что должно было быть очевидным с самого начала. –

+0

Большое спасибо. ваш ответ был очень полезен для меня. 1. Каковы критерии выбора значений альфа и k? 2. Что вы имели в виду под «вам нужно знать значения данных (62:66)»? – lida

+0

Alpha устанавливает уровень достоверности. При альфа = 0,05 уровень достоверности будет составлять 95%. Таким образом, с точки зрения мирян, существует 95% -ная уверенность в том, что 'val' не происходит от нормального распределения, определенного' avg' и 'stdev. –

-1

Просто используйте хранимую функцию для этой цели

detrend(list); 
+0

Большое спасибо за вашу реакцию. не могли бы вы рассказать о том, что происходит? (Я прочитал помощь в Matlab), а также как вы узнаете изменения в моем списке? – lida

Смежные вопросы