📄 generate_hmm_data.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -