Right, in your post there were some clues that the data were bad. And the Vbeta thing is definitely a red herring.
The data I’m looking at don't appear to be bad, but I haven't inspected them very closely. It's one subject-level contrast, brought to the group level. Other subject-level contrasts from the same subject-level model don't have this problem at the group level. I'll have to look more closely.
Cheers,
S
-----Original Message-----
From: Marko Wilke [mailto:[log in to unmask]]
Sent: Friday, January 28, 2011 9:51 AM
To: Fromm, Stephen (NIH/NIMH) [C]
Cc: [log in to unmask]
Subject: Re: [SPM] Model estimation fail: "Reference to non-existent field 'Vbeta'."
Hi Stephen,
thanks for your feedback, you pledge your case very convincingly :)
Following some discussions with Donald, Guillaume and others, I can
confirm that, yes, I was dealing with really bad data (well, at least I
know I do :), and yes, changing defaults.fMRI.stats.ufp allows
calculating the model. I can also confirm that the hyperparameter
estimation runs and that the error occurs before parameter estimation.
So in a way, this error tells you something is wrong with the dataset,
albeit not in a very helpful way (ok, it does plot the globals, but the
reference to Vbeta is likely only a red herring). Interestingly, the
error did not seem to be reproducible in the latest in-house version of
SPM, so there may be hope for those of you who also had this error.
Thanks to all for hunting this one down!
Cheers,
Marko
Stephen J. Fromm wrote:
> I think I know the answer to this, or most of an answer. I had the same issue a few days ago.
>
> This happens because spm_spm.m discards voxels that aren't significant. I don't think it's at the parameter estimation stage, but rather the hyperparameter estimation stage. That's why changing the nonsphericity correction from unequal to equal variances across groups (I think that means turning the correction off) fixes things. Looking at the code:
>
> 800 %-check there are signficant voxels
> 801 %----------------------------------------------------------------------
> * 802 if s == 0
> 803 spm('FigName','Stats: no significant voxels',Finter);
> 804 spm('Pointer','Arrow');
> 805 if isfield(SPM.xGX,'rg')&&~isempty(SPM.xGX.rg)
> 806 figure(Finter);
> 807 plot(SPM.xGX.rg);
> 808 spm('alert*',{'Please check your data'; ...
> 809 'There are no significant voxels';...
> 810 'The globals are plotted for diagnosis'});
> 811 else
> 812 spm('alert*',{'Please check your data'; ...
> 813 'There are no significant voxels'});
> 814 end
> 815 warning('Please check your data: There are no significant voxels.');
> * 816 return
> 817 end
>
> So it's clear that the problem is that s == 0. What does that mean? Further up the file:
>
> 693 %-If ReML hyperparameters are needed for xVi.V
> 694 %--------------------------------------------------------------
> 695 if ~isfield(xVi,'V')
> 696
> 697 %-F-threshold& accumulate spatially whitened Y*Y'
> 698 %----------------------------------------------------------
> * 699 j = sum((Hsqr*beta).^2,1)/trMV> UF*ResSS/trRV;
> 700 j = find(j);
> * 701 if ~isempty(j)
> 702 q = size(j,2);
> * 703 s = s + q;
> 704 q = spdiags(sqrt(trRV./ResSS(j)'),0,q,q);
> 705 Y = Y(:,j)*q;
> 706 Cy = Cy + Y*Y';
> 707 end
> 708
> 709 end % (xVi,'V')
>
> Note in particular lines 699, 701 and 703. What's happening is that all voxels are failing to pass the very liberal statistical threshold in 699. Again, this appears to relate to hyperparameter estimation, NOT parameter estimation.
>
> While I'm not sure of the validity, one way to deal with this (other than the method the original poster mentioned, which I mentioned again above) is to make UF more liberal. You can do that by changing the value of defaults.stats.fmri.ufp (I think liberal ==> make ufp larger), as seen from this code snippet:
>
> 456 % Threshold for voxels entering non-sphericity estimates
> 457 %----------------------------------------------------------------------
> 458 try
> 459 modality = lower(spm_get_defaults('modality'));
> 460 UFp = spm_get_defaults(['stats.' modality '.ufp']);
> 461 catch
> 462 UFp = 0.001;
> 463 end
> 464 UF = spm_invFcdf(1 - UFp,[trMV,trRV]);
>
> I'm sure this analysis is correct. What I'm not sure about is why, for certain datasets, no voxels pass this threshold. It's harder to parse the meaning as it deals with hyperparameters, and I haven't had the time. :-)
>
--
____________________________________________________
PD Dr. med. Marko Wilke
Facharzt für Kinder- und Jugendmedizin
Leiter, Experimentelle Pädiatrische Neurobildgebung
Universitäts-Kinderklinik
Abt. III (Neuropädiatrie)
Marko Wilke, MD, PhD
Pediatrician
Head, Experimental Pediatric Neuroimaging
University Children's Hospital
Dept. III (Pediatric Neurology)
Hoppe-Seyler-Str. 1
D - 72076 Tübingen, Germany
Tel. +49 7071 29-83416
Fax +49 7071 29-5473
[log in to unmask]
http://www.medizin.uni-tuebingen.de/kinder/epn
____________________________________________________
|