generate_hmm_data.m

来自「The BNL toolbox is a set of Matlab funct」· M 代码 · 共 44 行

M
44
字号
function gen_data=generate_hmm_data(N,sCPT,latklasprobs,percent_missing)
if nargin==3 percent_missing =0, end;
[S,M]=size(latklasprobs);
T=length(sCPT);
latdata=zeros(T,N,S);

gen_data=cell(T,1);
%simulate latent data
latdata(1,:,1)=binornd(1,sCPT{1}(1)*ones(1,N));
for i=2:S-1
  latdata(1,:,i)=squeeze((1-sum(latdata(1,:,:),3))).*binornd(1,(sCPT{1}(i)*ones(1,N))/sum(sCPT{1}(i:end)));
end
latdata(1,:,S)=1-sum(latdata(1,:,:),3);
for i=2:length(sCPT)
  latdata(i,:,1)=binornd(1,squeeze(latdata(i-1,:,:))*sCPT{i}(:,1));
  for j=2:S-1
      latdata(i,:,j)=squeeze((1-sum(latdata(i,:,:),3))).*binornd(1,squeeze(latdata(i-1,:,:))*sCPT{i}(:,j)/sum(sCPT{i}(:,j:end)));
  end
  latdata(i,:,S)=1-sum(latdata(i,:,:),3);
end

latdata=reshape(kron(latdata,ones(M,1)),[T*M N S]);

%simulate observed data
data=zeros(size(latdata));
for i=1:S
    data(:,:,i)=binornd(1,repmat(latklasprobs(i,:)',T,N));
end
data=sum(data.*latdata,3);

for i=1:T
    gen_data{i}=data((i-1)*M+1:i*M,:);
end
    
%include missingness
if percent_missing>0
    for i=1:T
        missing=binornd(1,percent_missing,[M N]);
        m=find(missing==1);
        gen_data{i}(m)=-1;
    end
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?