2013-07-15 3 views
4

У меня есть серия n = 400 последовательности различной длины, содержащие буквы ACGTE. Например, вероятность наличия С после является:Оценка доверительных интервалов матрицы перехода Маркова

enter image description here

и которые могут быть вычислены из набора эмпирических последовательностей, таким образом,

enter image description here

Предполагая: enter image description here

Затем я получаю транзит на матрице:

enter image description here

Но я заинтересован в расчете доверительных интервалов для Phat, любые мысли о том, как я могу идти об этом?

+1

это лучше подходит для http://stats.stackexchange.com/ – Amro

+0

Я думаю, что причина в том, что он здесь, чтобы привлечь специалистов Matlab, программистов и энтузиастов.вопрос форума статистики (http://stats.stackexchange.com/questions/64309/what-is-the-relevance-of-bootstrapped-confidence-intervals-on-markov-chain-trans?noredirect1_comment124036_64309) является не прикладывая никаких полезных ответов – HCAI

+1

ok хорошая точка. Я просто подумал, что вы получите объяснения там, я сам не статистик :) – Amro

ответ

7

Вы можете использовать bootstrapping для оценки confidence intervals. MATLAB предоставляет функцию bootci в панели инструментов Статистика. Вот пример:

%# generate a random cell array of 400 sequences of varying length 
%# each containing indices from 1 to 5 corresponding to ACGTE 
sequences = arrayfun(@(~) randi([1 5], [1 randi([500 1000])]), 1:400, ... 
    'UniformOutput',false)'; 

%# compute transition matrix from all sequences 
trans = countFcn(sequences); 

%# number of bootstrap samples to draw 
Nboot = 1000; 

%# estimate 95% confidence interval using bootstrapping 
ci = bootci(Nboot, {@countFcn, sequences}, 'alpha',0.05); 
ci = permute(ci, [2 3 1]); 

Получаем:

>> trans   %# 5x5 transition matrix: P_hat 
trans = 
     0.19747  0.2019  0.19849  0.2049  0.19724 
     0.20068  0.19959  0.19811  0.20233  0.19928 
     0.19841  0.19798  0.2021  0.2012  0.20031 
     0.20077  0.19926  0.20084  0.19988  0.19926 
     0.19895  0.19915  0.19963  0.20139  0.20088 

и два других подобных матриц, содержащих нижние и верхние границы доверительных интервалов:

>> ci(:,:,1)  %# CI lower bound 
>> ci(:,:,2)  %# CI upper bound 

Я использую следующую функцию для вычисления матрицы перехода из набора последовательностей:

function trans = countFcn(seqs) 
    %# accumulate transition matrix from all sequences 
    trans = zeros(5,5); 
    for i=1:numel(seqs) 
     trans = trans + sparse(seqs{i}(1:end-1), seqs{i}(2:end), 1, 5,5); 
    end 

    %# normalize into proper probabilities 
    trans = bsxfun(@rdivide, trans, sum(trans,2)); 
end 

В качестве бонуса, мы можем использовать bootstrp функцию, чтобы получить статистику, вычисленный из каждой начальной загрузки образца, который мы используем, чтобы показать гистограмму для каждого из элементов в матрице перехода:

%# compute multiple transition matrices using bootstrapping 
stat = bootstrp(Nboot, @countFcn, sequences); 

%# display histogram for each entry in the transition matrix 
sub = reshape(1:5*5,5,5); 
figure 
for i=1:size(stat,2) 
    subplot(5,5,sub(i)) 
    hist(stat(:,i)) 
end 

bootstrap_histograms

+0

Это фантастика! Спасибо огромное! Именно поэтому это не в форуме статистики! Предоставляя награду как можно скорее! Тем не менее, у меня есть опасения, что фактические записи строк в Phat не являются одномерными нормальными дистрибутивами, потому что они не могут варьироваться индивидуально. На самом деле каждая строка образует многомерное нормальное распределение, как вы думаете? например по мере увеличения одной записи, по крайней мере один другой в той же строке обязательно должен уменьшаться для поддержания суммы (P, 2) = 1 – HCAI

+0

Ничего себе, много усилий здесь! –

+1

Рад, что я мог помочь. Что касается 'P_hat', строки должны действительно суммироваться до одного (до определенной точности). В функции вычисления 'countFcn' я сначала накапливаю подсчеты совпадений из каждой последовательности (используя менее известный синтаксис« разреженной »функции, но мы могли бы также использовать« аккуратный »), затем я делясь на суммы строк (вызов 'bsxfun'). Одно предостережение: если символ не встречается в последовательности (скажем, мы имели только «[1 2 4 5]»), тогда мы могли бы делить на ноль, что приведет к значениям «NaN» в матрице перехода. Общим решением является добавление +1 ко всей матрице до нормализации строк – Amro

1

Не уверен, является ли это статистически достоверным, но простой способ получить ориентировочную верхнюю и нижнюю границу:

Отрежьте образец в n равных частях (например, 1: 40,41: 80, ..., 361: 400) и вычислить вероятностную матрицу для каждого из этих подпространств Плес.

Рассматривая распределение вероятностей среди подвыборки, вы должны получить довольно хорошее представление о том, что такое дисперсия.

Недостатком этого метода является то, что, возможно, невозможно вычислить интервал с заданной вероятностью. Преимущество состоит в том, что оно должно дать вам хорошее представление о том, как ведет себя серия, и что оно может захватывать некоторую информацию, которая может быть потеряна другими методами из-за допущений, на которых основаны другие методы (например, самонастраивание).

+1

Если у вас на самом деле есть несколько серий длины n, вам, вероятно, лучше не вычислять одну вероятность матрица на серию (вместо того, чтобы измельчать каждую серию по более мелким кускам) –

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