https://github.com/jdiedrichsen/pcm_toolbox
Raw File
Tip revision: 4e290a8b2c0d0820f868b7bcb60a3da7bb30e6ee authored by Jörn Diedrichsen on 26 April 2023, 01:59:24 UTC
Update pcm_estimateRegression.m
Tip revision: 4e290a8
pcm_ML_constrained_test.m
function [P1,P2]=ML_constrained_test
% Test constrained ML estimation -
% Speed up 
X=normrnd(0,1,5,80);
A = [1 3 0 0 0 0 0 0 0 0  
     3 2 0 0 0 0 0 0 0 0  
     0 0 4 0 0 0 0 0 0 0  
     0 0 0 4 0 0 0 0 0 0  
     0 0 0 0 4 0 0 0 0 0  
     0 0 0 0 0 4 0 0 0 0  
     0 0 0 0 0 0 4 0 0 0  
     0 0 0 0 0 0 0 5 0 0  
     0 0 0 0 0 0 0 0 5 0  
     0 0 0 0 0 0 0 0 0 5  
     6 0 0 0 0 0 0 0 0 0  
     0 6 0 0 0 0 0 0 0 0  
     0 0 6 0 0 0 0 0 0 0  
     0 0 0 6 0 0 0 0 0 0  
     0 0 0 0 6 0 0 0 0 0  
     0 0 0 0 0 6 0 0 0 0  
     0 0 0 0 0 0 6 0 0 0  
     0 0 0 0 0 0 0 6 0 0  
     0 0 0 0 0 0 0 0 6 0  
     0 0 0 0 0 0 0 0 0 6];

N=100; 
[P,Q]=size(A); 
H=max(A(:)); 
for i=1:6 
    Cc{i}=double(A==i)*i; 
    sCc{i}=sparse(Cc{i}); 
end; 
% Precompute cross-terms for M-step
CcCc = cell(H, H);
for i=1:H
    for j=i:H
        CcCc{i,j}=Cc{j}'*Cc{i}; % Calculate cross terms
        sCcCc{i,j}=sparse(CcCc{i,j}); 
    end;
end;

X=normrnd(0,1,Q,N); 
for n=1:300
    Y=A*X+normrnd(0,1,P,N);
    h1=ML_constrained(X*Y',X*X',Cc);
    [c1,v1]=ML_constrained2(Y*X',X*X',Cc,CcCc);
    [c2,v2]=ML_constrained_fast(Y*X',X*X',sCc,sCcCc); 
    h2=v2\c2; 
    h3=v1\c1;
end; 
[h1 h2 h3]  


back to top