Doxygen Source Code Documentation
3dANOVA2.c File Reference
#include "3dANOVA.h"#include "3dANOVA.lib"Go to the source code of this file.
Define Documentation
|
|
Definition at line 68 of file 3dANOVA2.c. Referenced by main(). |
|
|
Definition at line 69 of file 3dANOVA2.c. Referenced by main(). |
|
|
Definition at line 70 of file 3dANOVA2.c. Referenced by main(). |
|
|
Definition at line 67 of file 3dANOVA2.c. Referenced by get_options(), initialize(), and main(). |
|
|
Definition at line 74 of file 3dANOVA2.c. |
Function Documentation
|
|
Definition at line 3115 of file 3dANOVA2.c. References calculate_acontrasts(), calculate_adifferences(), calculate_ameans(), calculate_bcontrasts(), calculate_bdifferences(), calculate_bmeans(), calculate_fa(), calculate_fab(), calculate_fb(), calculate_ftr(), calculate_xcontrasts(), calculate_xdifferences(), calculate_xmeans(), anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, and anova_options::num_xmeans.
03116 {
03117
03118 /*----- calculate F-statistic for treatment effect -----*/
03119 if (option_data->nftr) calculate_ftr (option_data);
03120
03121 /*----- calculate F-statistic for factor A effect -----*/
03122 if (option_data->nfa) calculate_fa (option_data);
03123
03124 /*----- calculate F-statistic for factor B effect -----*/
03125 if (option_data->nfb) calculate_fb (option_data);
03126
03127 /*----- calculate F-statistic for interaction effect -----*/
03128 if (option_data->nfab) calculate_fab (option_data);
03129
03130 /*----- estimate level means for factor A -----*/
03131 if (option_data->num_ameans) calculate_ameans (option_data);
03132
03133 /*----- estimate level means for factor B -----*/
03134 if (option_data->num_bmeans) calculate_bmeans (option_data);
03135
03136 /*----- estimate cell means -----*/
03137 if (option_data->num_xmeans) calculate_xmeans (option_data);
03138
03139 /*----- estimate level differences for factor A -----*/
03140 if (option_data->num_adiffs) calculate_adifferences (option_data);
03141
03142 /*----- estimate level differences for factor B -----*/
03143 if (option_data->num_bdiffs) calculate_bdifferences (option_data);
03144
03145 /*----- estimate differences in cell means -----*/
03146 if (option_data->num_xdiffs) calculate_xdifferences (option_data);
03147
03148 /*----- estimate level contrasts for factor A -----*/
03149 if (option_data->num_acontr) calculate_acontrasts (option_data);
03150
03151 /*----- estimate level contrasts for factor B -----*/
03152 if (option_data->num_bcontr) calculate_bcontrasts (option_data);
03153
03154 /*----- estimate contrasts in cell means -----*/
03155 if (option_data->num_xcontr) calculate_xcontrasts (option_data);
03156
03157 }
|
|
||||||||||||||||
|
Definition at line 1194 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, and anova_options::nxyz. Referenced by calculate_acontrasts(), and calculate_adifferences().
01195 {
01196 double * sum = NULL; /* cumulative contrast mean (for accuracy) */
01197 int i; /* factor A level index */
01198 int a, b; /* number of levels for factors A and B */
01199 int n; /* number of observations per cell */
01200 int ixyz, nxyz; /* voxel counters */
01201 int nvoxel; /* output voxel # */
01202
01203
01204 /*----- initialize local variables -----*/
01205 a = option_data->a;
01206 b = option_data->b;
01207 n = option_data->n;
01208 nxyz = option_data->nxyz;
01209 nvoxel = option_data->nvoxel;
01210
01211 /*----- allocate memory space for calculations -----*/
01212 sum = (double *) malloc(sizeof(double)*nxyz);
01213 if (sum == NULL)
01214 ANOVA_error ("calc_acontr_mean: unable to allocate sufficient memory");
01215
01216 for (ixyz = 0; ixyz < nxyz; ixyz++) /* init to zero */
01217 sum[ixyz] = 0.0;
01218
01219 /*----- loop over contrast elements -----*/
01220 for (i = 0; i < a; i++)
01221 {
01222 if (contr[i] == 0.0 ) continue; /* then skip this index */
01223
01224 /* compute mean for this level of A (cheat, using cmean for memory) */
01225 calculate_sum(option_data, i, -1, cmean);
01226 if (nvoxel > 0)
01227 printf( "acontr[%d] = %f, ymean = %f\n",
01228 i, contr[i], cmean[nvoxel-1] / (n*b) );
01229 for (ixyz = 0; ixyz < nxyz; ixyz++)
01230 sum[ixyz] += (double)cmean[ixyz] / (n*b) * contr[i];
01231 }
01232
01233 /*----- copy results to float output -----*/
01234 for (ixyz = 0; ixyz < nxyz; ixyz++)
01235 cmean[ixyz] = sum[ixyz];
01236
01237 /*----- release memory -----*/
01238 free (sum);
01239 }
|
|
||||||||||||||||
|
Definition at line 1252 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), and anova_options::xname. Referenced by calculate_acontrasts(), and calculate_adifferences().
01253 {
01254 double * dsum = NULL; /* cumulative sum, for accuracy */
01255 double * dcontr = NULL; /* contrast sum */
01256 int i, j; /* indices for levels of factors A and B */
01257 int k; /* index for any repeated measure */
01258 int a, b; /* number of levels for factors A and B */
01259 int n; /* number of observations per cell */
01260 int ixyz, nxyz; /* voxel counters */
01261 int nvoxel; /* output voxel # */
01262
01263
01264 /*----- initialize local variables -----*/
01265 a = option_data->a;
01266 b = option_data->b;
01267 n = option_data->n;
01268 nxyz = option_data->nxyz;
01269 nvoxel = option_data->nvoxel;
01270
01271 /*----- allocate memory space for calculations -----*/
01272 dsum = (double *) malloc(sizeof(double)*nxyz);
01273 dcontr = (double *) malloc(sizeof(double)*nxyz);
01274 if (dsum == NULL || dcontr == NULL)
01275 ANOVA_error ("calc_sum_sq_acontr: unable to allocate sufficient memory");
01276
01277 for (ixyz = 0; ixyz < nxyz; ixyz++) /* init to zero */
01278 dsum[ixyz] = 0.0;
01279
01280 /*----- loop over factor B levels and repeated measures -----*/
01281 for ( j = 0; j < b; j++ )
01282 for ( k = 0; k < n; k++ )
01283 {
01284 /*----- add squared contrast for the given j, k -----*/
01285 for (ixyz = 0; ixyz < nxyz; ixyz++)
01286 dcontr[ixyz] = 0.0;
01287
01288 for (i = 0; i < a; i++)
01289 {
01290 if (acontr[i] == 0.0 ) continue; /* then skip this index */
01291
01292 /* read single dataset (cheat, using sum for memory) */
01293 read_afni_data(option_data, option_data->xname[i][j][0][k], sum);
01294 for (ixyz = 0; ixyz < nxyz; ixyz++)
01295 dcontr[ixyz] += (double)sum[ixyz] * acontr[i];
01296 }
01297 for (ixyz = 0; ixyz < nxyz; ixyz++)
01298 dsum[ixyz] += dcontr[ixyz] * dcontr[ixyz];
01299 }
01300
01301 /*----- copy results to float output -----*/
01302 for (ixyz = 0; ixyz < nxyz; ixyz++)
01303 sum[ixyz] = dsum[ixyz];
01304
01305 /*----- release memory -----*/
01306 free (dsum);
01307 free (dcontr);
01308 }
|
|
|
Definition at line 2797 of file 3dANOVA2.c. References a, anova_options::acname, anova_options::acontr, ANOVA_error(), anova_options::b, c, calc_acontr_mean(), calc_sum_sq_acontr(), calculate_sum(), calculate_t_from_sums(), free, malloc, anova_options::model, anova_options::n, anova_options::num_acontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02798 {
02799 float * contr = NULL; /* pointer to contrast estimate */
02800 float * tcontr = NULL; /* pointer to t-statistic data */
02801 int b; /* number of levels for factor B */
02802 int nxyz; /* number of voxels */
02803 int nvoxel; /* output voxel # */
02804 int num_contr; /* number of user requested contrasts */
02805 int icontr; /* index of user requested contrast */
02806 int n; /* number of observations per cell */
02807 int df; /* degrees of freedom for t-test */
02808
02809
02810 /*----- initialize local variables -----*/
02811 b = option_data->b;
02812 n = option_data->n;
02813 num_contr = option_data->num_acontr;
02814 nxyz = option_data->nxyz;
02815 nvoxel = option_data->nvoxel;
02816
02817 df = b*n - 1; /* for speed */
02818
02819 /*----- allocate memory space for calculations -----*/
02820 contr = (float *) malloc(sizeof(float)*nxyz);
02821 tcontr = (float *) malloc(sizeof(float)*nxyz);
02822 if ((contr == NULL) || (tcontr == NULL))
02823 ANOVA_error ("unable to allocate sufficient memory");
02824
02825
02826 /*----- loop over user specified constrasts -----*/
02827 for (icontr = 0; icontr < num_contr; icontr++)
02828 {
02829 /*----- get the acontr_mean and sum of squared contrast -----*/
02830 calc_acontr_mean(option_data, option_data->acontr[icontr], contr);
02831 calc_sum_sq_acontr(option_data, option_data->acontr[icontr], tcontr);
02832
02833 /*----- compute t -----*/
02834 calculate_t_from_sums(tcontr, contr, tcontr, df, nxyz);
02835
02836 #if 0 /* old way */
02837 for (level = 0; level < a; level++)
02838 {
02839 c = option_data->acontr[icontr][level];
02840 if (c == 0.0) continue;
02841
02842 /*----- add c * treatment level mean to contrast -----*/
02843 calculate_sum (option_data, level, -1, tcontr);
02844 fval += c * c / (b*n);
02845 for (ixyz = 0; ixyz < nxyz; ixyz++)
02846 contr[ixyz] += c * tcontr[ixyz] / (b*n);
02847 }
02848
02849 /*----- standard deviation depends on model type -----*/
02850 if (option_data->model == 1) {
02851 volume_read ("sse", tcontr, nxyz);
02852 df = a*b*(n-1);
02853 } else {
02854 volume_read ("ssab", tcontr, nxyz);
02855 df = (a-1)*(b-1);
02856 }
02857
02858 /*----- divide by estimated standard deviation of the contrast -----*/
02859 for (ixyz = 0; ixyz < nxyz; ixyz++)
02860 {
02861 stddev = sqrt ((tcontr[ixyz] / df) * fval);
02862 if (stddev < EPSILON) tcontr[ixyz] = 0.0;
02863 else tcontr[ixyz] = contr[ixyz] / stddev;
02864 }
02865 #endif
02866
02867 if (nvoxel > 0)
02868 printf ("No.%d contrast for factor A = %f, t = %f, df = %d\n",
02869 icontr+1, contr[nvoxel-1], tcontr[nvoxel-1], df);
02870
02871 /*----- write out afni data file -----*/
02872 write_afni_data (option_data, option_data->acname[icontr],
02873 contr, tcontr, df, 0);
02874
02875 }
02876
02877 /*----- release memory -----*/
02878 free (tcontr); tcontr = NULL;
02879 free (contr); contr = NULL;
02880
02881 }
|
|
|
Definition at line 2509 of file 3dANOVA2.c. References anova_options::a, a, anova_options::adiffs, anova_options::adname, ANOVA_error(), anova_options::b, calc_acontr_mean(), calc_sum_sq_acontr(), calculate_sum(), calculate_t_from_sums(), free, i, malloc, anova_options::model, anova_options::n, anova_options::num_adiffs, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02510 {
02511 float * diff = NULL; /* pointer to est. diff. in means */
02512 float * tdiff = NULL; /* pointer to t-statistic data */
02513 float * contrast; /* for using diff as contrast */
02514 int a; /* number of levels for factor A */
02515 int b; /* number of levels for factor B */
02516 int nxyz; /* number of voxels */
02517 int nvoxel; /* output voxel # */
02518 int num_diffs; /* number of user requested diffs. */
02519 int idiff; /* index for requested differences */
02520 int i, j; /* factor level indices */
02521 int n; /* number of observations per cell */
02522 int df, df_prod; /* degrees of freedom for t-test */
02523
02524
02525 /*----- initialize local variables -----*/
02526 a = option_data->a;
02527 b = option_data->b;
02528 n = option_data->n;
02529 num_diffs = option_data->num_adiffs;
02530 nxyz = option_data->nxyz;
02531 nvoxel = option_data->nvoxel;
02532
02533 /*----- number of differences, minus one -----*/
02534 df = b*n - 1;
02535 df_prod = df * (df+1);
02536
02537 /*----- allocate memory space for calculations -----*/
02538 diff = (float *) malloc(sizeof(float)*nxyz);
02539 tdiff = (float *) malloc(sizeof(float)*nxyz);
02540 contrast = (float *) malloc(sizeof(float)*a);
02541 if ((diff == NULL) || (tdiff == NULL) || (contrast == NULL))
02542 ANOVA_error ("calc_adiffs: unable to allocate sufficient memory");
02543
02544 /*----- loop over user specified treatment differences -----*/
02545 for (idiff = 0; idiff < num_diffs; idiff++)
02546 {
02547 for (i = 0 ; i < a; i++ ) contrast[i] = 0.0; /* clear contrast array */
02548
02549 i = option_data->adiffs[idiff][0];
02550 j = option_data->adiffs[idiff][1];
02551
02552 /* set the diff as a contrast */
02553 contrast[i] = 1; contrast[j] = -1;
02554
02555 /*----- and compute diff and t-stat as a contrast -----*/
02556 calc_acontr_mean(option_data, contrast, diff);
02557 calc_sum_sq_acontr(option_data, contrast, tdiff);
02558 calculate_t_from_sums(tdiff, diff, tdiff, df, nxyz);
02559
02560 if (nvoxel > 0)
02561 printf ("Difference of factor A level %d - level %d = %f \n",
02562 i+1, j+1, diff[nvoxel-1]);
02563
02564 #if 0
02565 /*----- read first treatment level mean -----*/
02566 calculate_sum (option_data, i, -1, diff);
02567 for (ixyz = 0; ixyz < nxyz; ixyz++) diff[ixyz] = diff[ixyz] / (b*n);
02568
02569 /*----- subtract second treatment level mean -----*/
02570 calculate_sum (option_data, j, -1, tdiff);
02571 for (ixyz = 0; ixyz < nxyz; ixyz++) diff[ixyz] -= tdiff[ixyz] / (b*n);
02572
02573 /*----- divide by estimated standard deviation of difference -----*/
02574 if (option_data->model == 1) /*----- fixed effects model -----*/
02575 {
02576 volume_read ("sse", tdiff, nxyz);
02577 df = a*b*(n-1);
02578 } else { /*----- mixed effects model -----*/
02579 volume_read ("ssab", tdiff, nxyz);
02580 df = (a-1)*(b-1);
02581 }
02582 fval = (1.0 / df) * (2.0 / (b*n));
02583 for (ixyz = 0; ixyz < nxyz; ixyz++)
02584 {
02585 stddev = sqrt (tdiff[ixyz] * fval);
02586 if (stddev < EPSILON) tdiff[ixyz] = 0.0;
02587 else tdiff[ixyz] = diff[ixyz] / stddev;
02588 }
02589 #endif
02590
02591 if (nvoxel > 0)
02592 printf ("t for difference of factor A level %d - level %d = %f \n",
02593 i+1, j+1, tdiff[nvoxel-1]);
02594
02595 /*----- write out afni data file -----*/
02596 write_afni_data (option_data, option_data->adname[idiff],
02597 diff, tdiff, df, 0);
02598
02599 }
02600
02601 /*----- release memory -----*/
02602 free (tdiff); tdiff = NULL;
02603 free (diff); diff = NULL;
02604 free (contrast); contrast = NULL;
02605 }
|
|
|
Definition at line 2243 of file 3dANOVA2.c. References a, anova_options::ameans, anova_options::amname, ANOVA_error(), anova_options::b, calculate_sum(), calculate_sum_sq(), calculate_t_from_sums(), free, malloc, anova_options::model, anova_options::n, anova_options::num_ameans, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02244 {
02245 float * mean = NULL; /* treatment mean volume */
02246 float * tmean = NULL; /* t-statistic */
02247 int imean; /* output mean option index */
02248 int level; /* factor A level index */
02249 int n; /* number of observations per cell */
02250 int ixyz, nxyz; /* voxel counters */
02251 int nvoxel; /* output voxel # */
02252 int b; /* number of levels for factor B */
02253 int num_means; /* number of user requested means */
02254 int df; /* degrees of freedom for t-test */
02255
02256
02257 /*----- initialize local variables -----*/
02258 b = option_data->b;
02259 n = option_data->n;
02260 num_means = option_data->num_ameans;
02261 nxyz = option_data->nxyz;
02262 nvoxel = option_data->nvoxel;
02263
02264 /*----- note degrees of freedom -----*/
02265 df = b * n - 1;
02266
02267 /*----- allocate memory space for calculations -----*/
02268 mean = (float *) malloc(sizeof(float)*nxyz);
02269 tmean = (float *) malloc(sizeof(float)*nxyz);
02270 if ((mean == NULL) || (tmean == NULL))
02271 ANOVA_error ("unable to allocate sufficient memory");
02272
02273 /*----- loop over user specified treatment means -----*/
02274 for (imean = 0; imean < num_means; imean++)
02275 {
02276 level = option_data->ameans[imean];
02277
02278 /*----- start with sum and sum of squares -----*/
02279 calculate_sum (option_data, level, -1, mean);
02280 calculate_sum_sq (option_data, level, -1, tmean);
02281
02282 /*----- estimate factor mean for this treatment level -----*/
02283 for (ixyz = 0; ixyz < nxyz; ixyz++)
02284 mean[ixyz] /= (df + 1.0);
02285
02286 /*----- calculate t-stats -----*/
02287 calculate_t_from_sums(tmean, mean, tmean, df, nxyz);
02288
02289 if (nvoxel > 0)
02290 printf ("factor A level %d: mean = %f, t = %f, df = %d\n",
02291 level+1, mean[nvoxel-1], tmean[nvoxel-1], df);
02292
02293 #if 0 /* old way */
02294 /*----- estimate factor mean for this treatment level -----*/
02295 calculate_sum (option_data, level, -1, mean);
02296 for (ixyz = 0; ixyz < nxyz; ixyz++)
02297 mean[ixyz] = mean[ixyz] / (n*b);
02298
02299 /*----- divide by estimated standard deviation of factor mean -----*/
02300 if (option_data->model == 1) /*----- fixed effects model -----*/
02301 {
02302 volume_read ("sse", tmean, nxyz);
02303 df = a*b*(n-1);
02304 }
02305 else /*----- mixed effects model -----*/
02306 {
02307 volume_read ("ssab", tmean, nxyz);
02308 df = (a-1)*(b-1);
02309 }
02310 fval = (1.0 / df) * (1.0 / (b*n));
02311 for (ixyz = 0; ixyz < nxyz; ixyz++)
02312 {
02313 stddev = sqrt(tmean[ixyz] * fval);
02314 if (stddev < EPSILON) tmean[ixyz] = 0.0;
02315 else tmean[ixyz] = mean[ixyz] / stddev;
02316 }
02317 #endif
02318
02319 /*----- write out afni data file -----*/
02320 write_afni_data (option_data, option_data->amname[imean],
02321 mean, tmean, df, 0);
02322
02323 }
02324
02325 /*----- release memory -----*/
02326 free (tmean); tmean = NULL;
02327 free (mean); mean = NULL;
02328 }
|
|
|
Definition at line 3072 of file 3dANOVA2.c. References calculate_ss0(), calculate_ssa(), calculate_ssab(), calculate_ssb(), calculate_sse(), calculate_ssi(), calculate_ssij(), calculate_ssijk(), calculate_ssj(), calculate_sstr(), anova_options::n, and volume_delete().
03073 {
03074
03075 /*----- calculate various sum and sums of squares -----*/
03076 calculate_ss0 (option_data);
03077 calculate_ssi (option_data);
03078 calculate_ssj (option_data);
03079 calculate_ssij (option_data);
03080 if (option_data->n != 1) calculate_ssijk (option_data);
03081
03082
03083 /*----- calculate error sum of squares -----*/
03084 if (option_data->n != 1)
03085 {
03086 calculate_sse (option_data);
03087 volume_delete ("ssijk");
03088 }
03089
03090 /*----- calculate treatment sum of squares -----*/
03091 calculate_sstr (option_data);
03092 volume_delete ("ssij");
03093
03094 /*----- calculate sum of squares due to A effect -----*/
03095 calculate_ssa (option_data);
03096 volume_delete ("ssi");
03097
03098 /*----- calculate sum of squares due to B effect -----*/
03099 calculate_ssb (option_data);
03100 volume_delete ("ssj");
03101
03102 volume_delete ("ss0");
03103
03104 /*----- calculate sum of squares due to A*B interaction -----*/
03105 calculate_ssab (option_data);
03106
03107 }
|
|
|
Definition at line 2891 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bcname, anova_options::bcontr, c, calculate_sum(), free, malloc, anova_options::n, anova_options::num_bcontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), volume_zero(), and write_afni_data().
02892 {
02893 const float EPSILON = 1.0e-10; /* protect against divide by zero */
02894 float * contr = NULL; /* pointer to contrast estimate */
02895 float * tcontr = NULL; /* pointer to t-statistic data */
02896 int a; /* number of levels for factor A */
02897 int b; /* number of levels for factor B */
02898 int ixyz, nxyz; /* voxel counters */
02899 int nvoxel; /* output voxel # */
02900 int num_contr; /* number of user requested contrasts */
02901 int icontr; /* index of user requested contrast */
02902 int level; /* factor level index */
02903 int df; /* degrees of freedom for t-test */
02904 int n; /* number of observations per cell */
02905 float fval; /* for calculating std. dev. */
02906 float c; /* contrast coefficient */
02907 float stddev; /* est. std. dev. of contrast */
02908
02909
02910 /*----- initialize local variables -----*/
02911 a = option_data->a;
02912 b = option_data->b;
02913 n = option_data->n;
02914 num_contr = option_data->num_bcontr;
02915 nxyz = option_data->nxyz;
02916 nvoxel = option_data->nvoxel;
02917
02918 /*----- allocate memory space for calculations -----*/
02919 contr = (float *) malloc(sizeof(float)*nxyz);
02920 tcontr = (float *) malloc(sizeof(float)*nxyz);
02921 if ((contr == NULL) || (tcontr == NULL))
02922 ANOVA_error ("unable to allocate sufficient memory");
02923
02924
02925 /*----- loop over user specified constrasts -----*/
02926 for (icontr = 0; icontr < num_contr; icontr++)
02927 {
02928 volume_zero (contr, nxyz);
02929 fval = 0.0;
02930
02931 for (level = 0; level < b; level++)
02932 {
02933 c = option_data->bcontr[icontr][level];
02934 if (c == 0.0) continue;
02935
02936 /*----- add c * treatment level mean to contrast -----*/
02937 calculate_sum (option_data, -1, level, tcontr);
02938 fval += c * c / (a*n);
02939 for (ixyz = 0; ixyz < nxyz; ixyz++)
02940 contr[ixyz] += c * tcontr[ixyz] / (a*n);
02941 }
02942 if (nvoxel > 0)
02943 printf ("No.%d contrast for factor B = %f \n",
02944 icontr+1, contr[nvoxel-1]);
02945
02946 /*----- divide by estimated standard deviation of the contrast -----*/
02947 volume_read ("sse", tcontr, nxyz);
02948 df = a * b * (n-1);
02949 for (ixyz = 0; ixyz < nxyz; ixyz++)
02950 {
02951 stddev = sqrt ((tcontr[ixyz] / df) * fval);
02952 if (stddev < EPSILON)
02953 tcontr[ixyz] = 0.0;
02954 else
02955 tcontr[ixyz] = contr[ixyz] / stddev;
02956 }
02957
02958 if (nvoxel > 0)
02959 printf ("t of No.%d contrast for factor B = %f \n",
02960 icontr+1, tcontr[nvoxel-1]);
02961
02962 /*----- write out afni data file -----*/
02963 write_afni_data (option_data, option_data->bcname[icontr],
02964 contr, tcontr, a*b*(n-1), 0);
02965
02966 }
02967
02968 /*----- release memory -----*/
02969 free (tcontr); tcontr = NULL;
02970 free (contr); contr = NULL;
02971 }
|
|
|
Definition at line 2616 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bdiffs, anova_options::bdname, calculate_sum(), free, i, malloc, anova_options::n, anova_options::num_bdiffs, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02617 {
02618 const float EPSILON = 1.0e-10; /* protect against divide by zero */
02619 float * diff = NULL; /* pointer to est. diff. in means */
02620 float * tdiff = NULL; /* pointer to t-statistic data */
02621 int a; /* number of levels for factor A */
02622 int b; /* number of levels for factor B */
02623 int ixyz, nxyz; /* voxel counters */
02624 int nvoxel; /* output voxel # */
02625 int num_diffs; /* number of user requested diffs. */
02626 int idiff; /* index for requested differences */
02627 int i, j; /* factor level indices */
02628 int n; /* number of observations per cell */
02629 int df; /* degrees of freedom for t-test */
02630 float fval; /* for calculating std. dev. */
02631 float stddev; /* est. std. dev. of difference */
02632
02633
02634 /*----- initialize local variables -----*/
02635 a = option_data->a;
02636 b = option_data->b;
02637 n = option_data->n;
02638 df = a*b*(n-1);
02639 num_diffs = option_data->num_bdiffs;
02640 nxyz = option_data->nxyz;
02641 nvoxel = option_data->nvoxel;
02642
02643 /*----- allocate memory space for calculations -----*/
02644 diff = (float *) malloc(sizeof(float)*nxyz);
02645 tdiff = (float *) malloc(sizeof(float)*nxyz);
02646 if ((diff == NULL) || (tdiff == NULL))
02647 ANOVA_error ("unable to allocate sufficient memory");
02648
02649 /*----- loop over user specified treatment differences -----*/
02650 for (idiff = 0; idiff < num_diffs; idiff++)
02651 {
02652
02653 /*----- read first treatment level mean -----*/
02654 i = option_data->bdiffs[idiff][0];
02655 calculate_sum (option_data, -1, i, diff);
02656 for (ixyz = 0; ixyz < nxyz; ixyz++)
02657 diff[ixyz] = diff[ixyz] / (a*n);
02658
02659 /*----- subtract second treatment level mean -----*/
02660 j = option_data->bdiffs[idiff][1];
02661 calculate_sum (option_data, -1, j, tdiff);
02662 for (ixyz = 0; ixyz < nxyz; ixyz++)
02663 diff[ixyz] -= tdiff[ixyz] / (a*n);
02664 if (nvoxel > 0)
02665 printf ("Difference of factor B level %d - level %d = %f \n",
02666 i+1, j+1, diff[nvoxel-1]);
02667
02668 /*----- divide by estimated standard deviation of difference -----*/
02669 volume_read ("sse", tdiff, nxyz);
02670 fval = (1.0 / df) * (2.0 / (a*n));
02671 for (ixyz = 0; ixyz < nxyz; ixyz++)
02672 {
02673 stddev = sqrt (tdiff[ixyz] * fval);
02674 if (stddev < EPSILON)
02675 tdiff[ixyz] = 0.0;
02676 else
02677 tdiff[ixyz] = diff[ixyz] / stddev;
02678 }
02679
02680 if (nvoxel > 0)
02681 printf ("t for difference of factor B level %d - level %d = %f \n",
02682 i+1, j+1, tdiff[nvoxel-1]);
02683
02684 /*----- write out afni data file -----*/
02685 write_afni_data (option_data, option_data->bdname[idiff],
02686 diff, tdiff, df, 0);
02687
02688 }
02689
02690 /*----- release memory -----*/
02691 free (tdiff); tdiff = NULL;
02692 free (diff); diff = NULL;
02693 }
|
|
|
Definition at line 2339 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::bmeans, anova_options::bmname, calculate_sum(), free, malloc, anova_options::n, anova_options::nt, anova_options::num_bmeans, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02340 {
02341 const float EPSILON = 1.0e-10; /* protect against divide by zero */
02342 float * mean = NULL; /* pointer to treatment mean data */
02343 float * tmean = NULL; /* pointer to t-statistic data */
02344 int imean; /* output mean option index */
02345 int level; /* factor B level index */
02346 int n; /* number of observations per cell */
02347 int ixyz, nxyz; /* voxel counters */
02348 int nvoxel; /* output voxel # */
02349 int a; /* number of levels for factor A */
02350 int b; /* number of levels for factor B */
02351 int nt; /* total number of observations */
02352 int num_means; /* number of user requested means */
02353 int df; /* degrees of freedom for t-test */
02354 float fval; /* for calculating std. dev. */
02355 float stddev; /* est. std. dev. of factor mean */
02356
02357
02358 /*----- initialize local variables -----*/
02359 a = option_data->a;
02360 b = option_data->b;
02361 n = option_data->n;
02362 df = a * b * (n-1);
02363 nt = option_data->nt;
02364 num_means = option_data->num_bmeans;
02365 nxyz = option_data->nxyz;
02366 nvoxel = option_data->nvoxel;
02367
02368 /*----- allocate memory space for calculations -----*/
02369 mean = (float *) malloc(sizeof(float)*nxyz);
02370 tmean = (float *) malloc(sizeof(float)*nxyz);
02371 if ((mean == NULL) || (tmean == NULL))
02372 ANOVA_error ("unable to allocate sufficient memory");
02373
02374 /*----- loop over user specified treatment means -----*/
02375 for (imean = 0; imean < num_means; imean++)
02376 {
02377 level = option_data->bmeans[imean];
02378
02379 /*----- estimate factor mean for this treatment level -----*/
02380 calculate_sum (option_data, -1, level, mean);
02381 for (ixyz = 0; ixyz < nxyz; ixyz++)
02382 mean[ixyz] = mean[ixyz] / (n*a);
02383 if (nvoxel > 0)
02384 printf ("Mean of factor B level %d = %f \n", level+1, mean[nvoxel-1]);
02385
02386 /*----- divide by estimated standard deviation of factor mean -----*/
02387 volume_read ("sse", tmean, nxyz);
02388 fval = (1.0 / df) * (1.0 / (a*n));
02389 for (ixyz = 0; ixyz < nxyz; ixyz++)
02390 {
02391 stddev = sqrt(tmean[ixyz] * fval);
02392 if (stddev < EPSILON)
02393 tmean[ixyz] = 0.0;
02394 else
02395 tmean[ixyz] = mean[ixyz] / stddev;
02396 }
02397 if (nvoxel > 0)
02398 printf ("t for mean of factor B level %d = %f \n",
02399 level+1, tmean[nvoxel-1]);
02400
02401 /*----- write out afni data file -----*/
02402 write_afni_data (option_data, option_data->bmname[imean],
02403 mean, tmean, df, 0);
02404
02405 }
02406
02407 /*----- release memory -----*/
02408 free (tmean); tmean = NULL;
02409 free (mean); mean = NULL;
02410 }
|
|
|
Definition at line 1962 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, fa, anova_options::faname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), and write_afni_data().
01963 {
01964 const float EPSILON = 1.0e-10; /* protect against divide by zero */
01965 float * msa = NULL; /* pointer to MSA data */
01966 float * fa = NULL; /* pointer to F due to factor A */
01967 int a; /* number of levels for factor A */
01968 int b; /* number of levels for factor B */
01969 int n; /* number of observations per cell */
01970 int ixyz, nxyz; /* voxel counters */
01971 int nvoxel; /* output voxel # */
01972 int numdf; /* numerator degrees of freedom */
01973 int dendf; /* denominator degrees of freedom */
01974 float mse; /* mean square error */
01975 float msab; /* mean square interaction */
01976
01977
01978 /*----- initialize local variables -----*/
01979 a = option_data->a;
01980 b = option_data->b;
01981 n = option_data->n;
01982 nxyz = option_data->nxyz;
01983 nvoxel = option_data->nvoxel;
01984
01985 /*----- allocate memory space for calculations -----*/
01986 fa = (float *) malloc(sizeof(float)*nxyz);
01987 msa = (float *) malloc(sizeof(float)*nxyz);
01988 if ((fa == NULL) || (msa == NULL))
01989 ANOVA_error ("unable to allocate sufficient memory");
01990
01991 /*----- calculate mean SS due to factor A -----*/
01992 volume_read ("ssa", msa, nxyz);
01993 numdf = a - 1;
01994 for (ixyz = 0; ixyz < nxyz; ixyz++)
01995 msa[ixyz] = msa[ixyz] / numdf; /*--- MSA = SSA / (a-1) ---*/
01996 if (nvoxel > 0)
01997 printf ("MSA = %f \n", msa[nvoxel-1]);
01998
01999 /*----- calculate F-statistic -----*/
02000 if (option_data->model == 1)
02001 {
02002 /*----- fixed effects model -----*/
02003 volume_read ("sse", fa, nxyz);
02004 dendf = a * b * (n-1);
02005 for (ixyz = 0; ixyz < nxyz; ixyz++)
02006 {
02007 mse = fa[ixyz] / dendf; /*--- MSE = SSE / (ab(n-1)) ---*/
02008 if (mse < EPSILON)
02009 fa[ixyz] = 0.0;
02010 else
02011 fa[ixyz] = msa[ixyz] / mse; /*--- F = MSA / MSE ---*/
02012 }
02013 }
02014 else
02015 {
02016 /*----- random or mixed effects model -----*/
02017 volume_read ("ssab", fa, nxyz);
02018 dendf = (a-1) * (b-1);
02019 for (ixyz = 0; ixyz < nxyz; ixyz++)
02020 {
02021 msab = fa[ixyz] / dendf; /*--- MSAB = SSAB / (a-1)(b-1) ---*/
02022 if (msab < EPSILON)
02023 fa[ixyz] = 0.0;
02024 else
02025 fa[ixyz] = msa[ixyz] / msab; /*--- F = MSA / MSAB ---*/
02026 }
02027 }
02028
02029 if (nvoxel > 0)
02030 printf ("FA = %f \n", fa[nvoxel-1]);
02031
02032 /*----- write out afni data file -----*/
02033 for (ixyz = 0; ixyz < nxyz; ixyz++)
02034 msa[ixyz] = sqrt(msa[ixyz]); /*-- msa now holds square root --*/
02035 write_afni_data (option_data, option_data->faname,
02036 msa, fa, numdf, dendf);
02037
02038 /*----- this data file is no longer needed -----*/
02039 volume_delete ("ssa");
02040
02041 /*----- release memory -----*/
02042 free (msa); msa = NULL;
02043 free (fa); fa = NULL;
02044
02045 }
|
|
|
Definition at line 2164 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::fabname, free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_read(), and write_afni_data().
02165 {
02166 const float EPSILON = 1.0e-10; /* protect against divide by zero */
02167 float * msab = NULL; /* pointer to MSAB data */
02168 float * fab = NULL; /* pointer to F due to interaction */
02169 int a; /* number of levels for factor A */
02170 int b; /* number of levels for factor B */
02171 int n; /* number of observations per cell */
02172 int ixyz, nxyz; /* voxel counters */
02173 int nvoxel; /* output voxel # */
02174 float fval; /* float value used in calculations */
02175 float mse; /* mean square error */
02176
02177
02178 /*----- initialize local variables -----*/
02179 a = option_data->a;
02180 b = option_data->b;
02181 n = option_data->n;
02182 nxyz = option_data->nxyz;
02183 nvoxel = option_data->nvoxel;
02184
02185 /*----- allocate memory space for calculations -----*/
02186 fab = (float *) malloc(sizeof(float)*nxyz);
02187 msab = (float *) malloc(sizeof(float)*nxyz);
02188 if ((fab == NULL) || (msab == NULL))
02189 ANOVA_error ("unable to allocate sufficient memory");
02190
02191 /*----- calculate mean SS due to interaction -----*/
02192 volume_read ("ssab", msab, nxyz);
02193 fval = 1.0 / ((a - 1.0)*(b - 1.0));
02194 for (ixyz = 0; ixyz < nxyz; ixyz++)
02195 msab[ixyz] = msab[ixyz] * fval; /*--- MSAB = SSAB/((a-1)(b-1)) ---*/
02196 if (nvoxel > 0)
02197 printf ("MSAB = %f \n", msab[nvoxel-1]);
02198
02199 /*----- calculate F-statistic -----*/
02200 volume_read ("sse", fab, nxyz);
02201 fval = 1.0 / (a * b * (n-1));
02202 for (ixyz = 0; ixyz < nxyz; ixyz++)
02203 {
02204 mse = fab[ixyz] * fval; /*--- MSE = SSE / (ab(n-1)) ---*/
02205 if (mse < EPSILON)
02206 fab[ixyz] = 0.0;
02207 else
02208 fab[ixyz] = msab[ixyz] / mse; /*--- F = MSAB / MSE ---*/
02209 }
02210 if (nvoxel > 0)
02211 printf ("FAB = %f \n", fab[nvoxel-1]);
02212
02213 /*----- write out afni data file -----*/
02214 for (ixyz = 0; ixyz < nxyz; ixyz++)
02215 msab[ixyz] = sqrt(msab[ixyz]); /*-- msab now holds square root --*/
02216 write_afni_data (option_data, option_data->fabname,
02217 msab, fab, (a-1)*(b-1), a*b*(n-1));
02218
02219 /*----- release memory -----*/
02220 free (msab); msab = NULL;
02221 free (fab); fab = NULL;
02222
02223 }
|
|
|
Definition at line 2067 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, fb, anova_options::fbname, free, malloc, anova_options::model, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), and write_afni_data().
02068 {
02069 const float EPSILON = 1.0e-10; /* protect against divide by zero */
02070 float * msb = NULL; /* pointer to MSB data */
02071 float * fb = NULL; /* pointer to F due to factor B */
02072 int a; /* number of levels for factor A */
02073 int b; /* number of levels for factor B */
02074 int n; /* number of observations per cell */
02075 int ixyz, nxyz; /* voxel counters */
02076 int nvoxel; /* output voxel # */
02077 int numdf; /* numerator degrees of freedom */
02078 int dendf; /* denominator degrees of freedom */
02079 float mse; /* mean square error */
02080 float msab; /* mean square interaction */
02081
02082
02083 /*----- initialize local variables -----*/
02084 a = option_data->a;
02085 b = option_data->b;
02086 n = option_data->n;
02087 nxyz = option_data->nxyz;
02088 nvoxel = option_data->nvoxel;
02089
02090 /*----- allocate memory space for calculations -----*/
02091 fb = (float *) malloc(sizeof(float)*nxyz);
02092 msb = (float *) malloc(sizeof(float)*nxyz);
02093 if ((fb == NULL) || (msb == NULL))
02094 ANOVA_error ("unable to allocate sufficient memory");
02095
02096 /*----- calculate mean SS due to factor B -----*/
02097 volume_read ("ssb", msb, nxyz);
02098 numdf = b - 1;
02099 for (ixyz = 0; ixyz < nxyz; ixyz++)
02100 msb[ixyz] = msb[ixyz] / numdf; /*--- MSB = SSB / (b-1) ---*/
02101 if (nvoxel > 0)
02102 printf ("MSB = %f \n", msb[nvoxel-1]);
02103
02104 /*----- calculate F-statistic -----*/
02105 if ((option_data->model == 1) || (option_data->model == 3))
02106 {
02107 /*----- fixed effects model or mixed effects model -----*/
02108 volume_read ("sse", fb, nxyz);
02109 dendf = a * b * (n-1);
02110 for (ixyz = 0; ixyz < nxyz; ixyz++)
02111 {
02112 mse = fb[ixyz] / dendf; /*--- MSE = SSE / (ab(n-1)) ---*/
02113 if (mse < EPSILON)
02114 fb[ixyz] = 0.0;
02115 else
02116 fb[ixyz] = msb[ixyz] / mse; /*--- F = MSB / MSE ---*/
02117 }
02118 }
02119 else
02120 {
02121 /*----- random effects model -----*/
02122 volume_read ("ssab", fb, nxyz);
02123 dendf = (a-1) * (b-1);
02124 for (ixyz = 0; ixyz < nxyz; ixyz++)
02125 {
02126 msab = fb[ixyz] / dendf; /*--- MSAB = SSAB / (a-1)(b-1) ---*/
02127 if (msab < EPSILON)
02128 fb[ixyz] = 0.0;
02129 else
02130 fb[ixyz] = msb[ixyz] / msab; /*--- F = MSB / MSAB ---*/
02131 }
02132 }
02133
02134 if (nvoxel > 0)
02135 printf ("FB = %f \n", fb[nvoxel-1]);
02136
02137 /*----- write out afni data file -----*/
02138 for (ixyz = 0; ixyz < nxyz; ixyz++)
02139 msb[ixyz] = sqrt(msb[ixyz]); /*-- msb now holds square root --*/
02140 write_afni_data (option_data, option_data->fbname,
02141 msb, fb, numdf, dendf);
02142
02143 /*----- this data file is no longer needed -----*/
02144 volume_delete ("ssb");
02145
02146 /*----- release memory -----*/
02147 free (msb); msb = NULL;
02148 free (fb); fb = NULL;
02149
02150 }
|
|
|
Definition at line 1877 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, anova_options::ftrname, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_delete(), volume_read(), and write_afni_data(). Referenced by analyze_results().
01878 {
01879 const float EPSILON = 1.0e-10; /* protect against divide by zero */
01880 float * mstr = NULL; /* pointer to MSTR data */
01881 float * ftr = NULL; /* pointer to F due-to-treatment */
01882 int a; /* number of levels for factor A */
01883 int b; /* number of levels for factor B */
01884 int n; /* number of observations per cell */
01885 int ixyz, nxyz; /* voxel counters */
01886 int nvoxel; /* output voxel # */
01887 float fval; /* float value used in calculations */
01888 float mse; /* mean square error */
01889
01890
01891
01892 /*----- initialize local variables -----*/
01893 a = option_data->a;
01894 b = option_data->b;
01895 n = option_data->n;
01896 nxyz = option_data->nxyz;
01897 nvoxel = option_data->nvoxel;
01898
01899 /*----- allocate memory space for calculations -----*/
01900 ftr = (float *) malloc(sizeof(float)*nxyz);
01901 mstr = (float *) malloc(sizeof(float)*nxyz);
01902 if ((ftr == NULL) || (mstr == NULL))
01903 ANOVA_error ("unable to allocate sufficient memory");
01904
01905 /*----- calculate mean SS due to treatments -----*/
01906 volume_read ("sstr", mstr, nxyz);
01907 fval = 1.0 / (a*b - 1.0);
01908 for (ixyz = 0; ixyz < nxyz; ixyz++)
01909 mstr[ixyz] = mstr[ixyz] * fval; /*--- MSTR = SSTR / (ab-1) ---*/
01910 if (nvoxel > 0)
01911 printf ("MSTR = %f \n", mstr[nvoxel-1]);
01912
01913 /*----- calculate F-statistic -----*/
01914 volume_read ("sse", ftr, nxyz);
01915 fval = 1.0 / (a * b * (n-1));
01916 for (ixyz = 0; ixyz < nxyz; ixyz++)
01917 {
01918 mse = ftr[ixyz] * fval; /*--- MSE = SSE / (ab(n-1)) ---*/
01919 if (mse < EPSILON)
01920 ftr[ixyz] = 0.0;
01921 else
01922 ftr[ixyz] = mstr[ixyz] / mse; /*--- F = MSTR / MSE ---*/
01923 }
01924 if (nvoxel > 0)
01925 printf ("FTR = %f \n", ftr[nvoxel-1]);
01926
01927 /*----- write out afni data file -----*/
01928 for (ixyz = 0; ixyz < nxyz; ixyz++)
01929 mstr[ixyz] = sqrt(mstr[ixyz]); /*-- mstr now holds square root --*/
01930 write_afni_data (option_data, option_data->ftrname,
01931 mstr, ftr, a*b-1, a*b*(n-1));
01932
01933 /*----- this data file is no longer needed -----*/
01934 volume_delete ("sstr");
01935
01936 /*----- release memory -----*/
01937 free (mstr); mstr = NULL;
01938 free (ftr); ftr = NULL;
01939
01940 }
|
|
|
Definition at line 1317 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, and volume_write().
01318 {
01319 float * ss0 = NULL; /* pointer to output data */
01320 float * ysum = NULL; /* pointer to sum over all observations */
01321 int a; /* number of levels for factor A */
01322 int b; /* number of levels for factor B */
01323 int n; /* number of observations per cell */
01324 int ixyz, nxyz; /* voxel counters */
01325 int nvoxel; /* output voxel # */
01326 int nval; /* divisor of sum */
01327 char filename[MAX_NAME_LENGTH]; /* name of output file */
01328
01329
01330 /*----- initialize local variables -----*/
01331 a = option_data->a;
01332 b = option_data->b;
01333 n = option_data->n;
01334 nxyz = option_data->nxyz;
01335 nvoxel = option_data->nvoxel;
01336 nval = a * b * n;
01337
01338 /*----- allocate memory space for calculations -----*/
01339 ss0 = (float *) malloc(sizeof(float)*nxyz);
01340 ysum = (float *) malloc(sizeof(float)*nxyz);
01341 if ((ss0 == NULL) || (ysum == NULL))
01342 ANOVA_error ("unable to allocate sufficient memory");
01343
01344 /*----- sum over all observations -----*/
01345 calculate_sum (option_data, -1, -1, ysum);
01346
01347 /*----- calculate ss0 -----*/
01348 for (ixyz = 0; ixyz < nxyz; ixyz++)
01349 ss0[ixyz] = ysum[ixyz] * ysum[ixyz] / nval;
01350
01351
01352 /*----- save the sum -----*/
01353 if (nvoxel > 0)
01354 printf ("SS0 = %f \n", ss0[nvoxel-1]);
01355 strcpy (filename, "ss0");
01356 volume_write (filename, ss0, nxyz);
01357
01358
01359 /*----- release memory -----*/
01360 free (ysum); ysum = NULL;
01361 free (ss0); ss0 = NULL;
01362
01363 }
|
|
|
Definition at line 1721 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().
01722 {
01723 float * y = NULL; /* input data pointer */
01724 float * ssa = NULL; /* output data pointer */
01725 int ixyz, nxyz; /* voxel counters */
01726 int nvoxel; /* output voxel # */
01727
01728
01729 /*----- assign local variables -----*/
01730 nxyz = option_data->nxyz;
01731 nvoxel = option_data->nvoxel;
01732
01733 /*----- allocate memory space for calculations -----*/
01734 ssa = (float *) malloc (sizeof(float)*nxyz);
01735 y = (float *) malloc (sizeof(float)*nxyz);
01736 if ((y == NULL) || (ssa == NULL))
01737 ANOVA_error ("unable to allocate sufficient memory");
01738
01739
01740 /*----- calculate SSA -----*/
01741 volume_read ("ssi", ssa, nxyz);
01742
01743 volume_read ("ss0", y, nxyz);
01744 for (ixyz = 0; ixyz < nxyz; ixyz++)
01745 ssa[ixyz] -= y[ixyz];
01746
01747
01748 /*----- protection against round-off error -----*/
01749 for (ixyz = 0; ixyz < nxyz; ixyz++)
01750 if (ssa[ixyz] < 0.0) ssa[ixyz] = 0.0;
01751
01752 /*----- save factor A sum of squares -----*/
01753 if (nvoxel > 0)
01754 printf ("SSA = %f \n", ssa[nvoxel-1]);
01755 volume_write ("ssa", ssa, nxyz);
01756
01757 /*----- release memory -----*/
01758 free (y); y = NULL;
01759 free (ssa); ssa = NULL;
01760
01761 }
|
|
|
Definition at line 1819 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().
01820 {
01821 float * y = NULL; /* input data pointer */
01822 float * ssab = NULL; /* output data pointer */
01823 int ixyz, nxyz; /* voxel counters */
01824 int nvoxel; /* output voxel # */
01825
01826
01827 /*----- assign local variables -----*/
01828 nxyz = option_data->nxyz;
01829 nvoxel = option_data->nvoxel;
01830
01831 /*----- allocate memory space for calculations -----*/
01832 ssab = (float *) malloc (sizeof(float)*nxyz);
01833 y = (float *) malloc (sizeof(float)*nxyz);
01834 if ((y == NULL) || (ssab == NULL))
01835 ANOVA_error ("unable to allocate sufficient memory");
01836
01837
01838 /*----- calculate SSAB -----*/
01839 volume_read ("sstr", ssab, nxyz);
01840
01841 volume_read ("ssa", y, nxyz);
01842 for (ixyz = 0; ixyz < nxyz; ixyz++)
01843 ssab[ixyz] -= y[ixyz];
01844
01845 volume_read ("ssb", y, nxyz);
01846 for (ixyz = 0; ixyz < nxyz; ixyz++)
01847 ssab[ixyz] -= y[ixyz];
01848
01849
01850 /*----- protection against round-off error -----*/
01851 for (ixyz = 0; ixyz < nxyz; ixyz++)
01852 if (ssab[ixyz] < 0.0) ssab[ixyz] = 0.0;
01853
01854 /*----- save factor A*B sum of squares -----*/
01855 if (nvoxel > 0)
01856 printf ("SSAB = %f \n", ssab[nvoxel-1]);
01857 volume_write ("ssab", ssab, nxyz);
01858
01859 /*----- release memory -----*/
01860 free (y); y = NULL;
01861 free (ssab); ssab = NULL;
01862
01863 }
|
|
|
Definition at line 1770 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().
01771 {
01772 float * y = NULL; /* input data pointer */
01773 float * ssb = NULL; /* output data pointer */
01774 int ixyz, nxyz; /* voxel counters */
01775 int nvoxel; /* output voxel # */
01776
01777
01778 /*----- assign local variables -----*/
01779 nxyz = option_data->nxyz;
01780 nvoxel = option_data->nvoxel;
01781
01782 /*----- allocate memory space for calculations -----*/
01783 ssb = (float *) malloc (sizeof(float)*nxyz);
01784 y = (float *) malloc (sizeof(float)*nxyz);
01785 if ((y == NULL) || (ssb == NULL))
01786 ANOVA_error ("unable to allocate sufficient memory");
01787
01788
01789 /*----- calculate SSB -----*/
01790 volume_read ("ssj", ssb, nxyz);
01791
01792 volume_read ("ss0", y, nxyz);
01793 for (ixyz = 0; ixyz < nxyz; ixyz++)
01794 ssb[ixyz] -= y[ixyz];
01795
01796
01797 /*----- protection against round-off error -----*/
01798 for (ixyz = 0; ixyz < nxyz; ixyz++)
01799 if (ssb[ixyz] < 0.0) ssb[ixyz] = 0.0;
01800
01801 /*----- save factor B sum of squares -----*/
01802 if (nvoxel > 0)
01803 printf ("SSB = %f \n", ssb[nvoxel-1]);
01804 volume_write ("ssb", ssb, nxyz);
01805
01806 /*----- release memory -----*/
01807 free (y); y = NULL;
01808 free (ssb); ssb = NULL;
01809
01810 }
|
|
|
Definition at line 1623 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write().
01624 {
01625 float * y = NULL; /* input data pointer */
01626 float * sse = NULL; /* sse data pointer */
01627 int ixyz, nxyz; /* voxel counters */
01628 int nvoxel; /* output voxel # */
01629
01630
01631 /*----- assign local variables -----*/
01632 nxyz = option_data->nxyz;
01633 nvoxel = option_data->nvoxel;
01634
01635 /*----- allocate memory space for calculations -----*/
01636 sse = (float *) malloc (sizeof(float)*nxyz);
01637 y = (float *) malloc (sizeof(float)*nxyz);
01638 if ((y == NULL) || (sse == NULL))
01639 ANOVA_error ("unable to allocate sufficient memory");
01640
01641
01642 /*----- calculate SSE -----*/
01643 volume_read ("ssijk", sse, nxyz);
01644
01645 volume_read ("ssij", y, nxyz);
01646 for (ixyz = 0; ixyz < nxyz; ixyz++)
01647 sse[ixyz] -= y[ixyz];
01648
01649
01650 /*----- protection against round-off error -----*/
01651 for (ixyz = 0; ixyz < nxyz; ixyz++)
01652 if (sse[ixyz] < 0.0) sse[ixyz] = 0.0;
01653
01654 /*----- save error sum of squares -----*/
01655 if (nvoxel > 0)
01656 printf ("SSE = %f \n", sse[nvoxel-1]);
01657 volume_write ("sse", sse, nxyz);
01658
01659 /*----- release memory -----*/
01660 free (y); y = NULL;
01661 free (sse); sse = NULL;
01662
01663 }
|
|
|
Definition at line 1372 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().
01373 {
01374 float * ssi = NULL; /* pointer to output data */
01375 float * ysum = NULL; /* pointer to sum over observations */
01376 int a; /* number of levels for factor A */
01377 int b; /* number of levels for factor B */
01378 int n; /* number of observations per cell */
01379 int i; /* index for factor A levels */
01380 int ixyz, nxyz; /* voxel counters */
01381 int nvoxel; /* output voxel # */
01382 int nval; /* divisor of sum */
01383 char filename[MAX_NAME_LENGTH]; /* name of output file */
01384
01385
01386 /*----- initialize local variables -----*/
01387 a = option_data->a;
01388 b = option_data->b;
01389 n = option_data->n;
01390 nxyz = option_data->nxyz;
01391 nvoxel = option_data->nvoxel;
01392 nval = b * n;
01393
01394 /*----- allocate memory space for calculations -----*/
01395 ssi = (float *) malloc(sizeof(float)*nxyz);
01396 ysum = (float *) malloc(sizeof(float)*nxyz);
01397 if ((ssi == NULL) || (ysum == NULL))
01398 ANOVA_error ("unable to allocate sufficient memory");
01399
01400 volume_zero (ssi, nxyz);
01401
01402 /*----- loop over levels of factor A -----*/
01403 for (i = 0; i < a; i++)
01404 {
01405 /*----- sum over observations -----*/
01406 calculate_sum (option_data, i, -1, ysum);
01407
01408 /*----- add to ssi -----*/
01409 for (ixyz = 0; ixyz < nxyz; ixyz++)
01410 ssi[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01411 }
01412
01413 /*----- save the sum -----*/
01414 if (nvoxel > 0)
01415 printf ("SSI = %f \n", ssi[nvoxel-1]);
01416 strcpy (filename, "ssi");
01417 volume_write (filename, ssi, nxyz);
01418
01419
01420 /*----- release memory -----*/
01421 free (ysum); ysum = NULL;
01422 free (ssi); ssi = NULL;
01423
01424 }
|
|
|
Definition at line 1494 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().
01495 {
01496 float * ssij = NULL; /* pointer to output data */
01497 float * ysum = NULL; /* pointer to sum over observations */
01498 int a; /* number of levels for factor A */
01499 int b; /* number of levels for factor B */
01500 int n; /* number of observations per cell */
01501 int i, j; /* indices for factor A and B levels */
01502 int ixyz, nxyz; /* voxel counters */
01503 int nvoxel; /* output voxel # */
01504 int nval; /* divisor of sum */
01505 char filename[MAX_NAME_LENGTH]; /* name of output file */
01506
01507
01508 /*----- initialize local variables -----*/
01509 a = option_data->a;
01510 b = option_data->b;
01511 n = option_data->n;
01512 nxyz = option_data->nxyz;
01513 nvoxel = option_data->nvoxel;
01514 nval = n;
01515
01516 /*----- allocate memory space for calculations -----*/
01517 ssij = (float *) malloc(sizeof(float)*nxyz);
01518 ysum = (float *) malloc(sizeof(float)*nxyz);
01519 if ((ssij == NULL) || (ysum == NULL))
01520 ANOVA_error ("unable to allocate sufficient memory");
01521
01522 volume_zero (ssij, nxyz);
01523
01524 /*----- loop over levels of factor A -----*/
01525 for (i = 0; i < a; i++)
01526 {
01527 /*----- loop over levels of factor B -----*/
01528 for (j = 0; j < b; j++)
01529 {
01530 /*----- sum over observations -----*/
01531 calculate_sum (option_data, i, j, ysum);
01532
01533 /*----- add to ssij -----*/
01534 for (ixyz = 0; ixyz < nxyz; ixyz++)
01535 ssij[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01536 }
01537 }
01538
01539 /*----- save the sum -----*/
01540 if (nvoxel > 0)
01541 printf ("SSIJ = %f \n", ssij[nvoxel-1]);
01542 strcpy (filename, "ssij");
01543 volume_write (filename, ssij, nxyz);
01544
01545
01546 /*----- release memory -----*/
01547 free (ysum); ysum = NULL;
01548 free (ssij); ssij = NULL;
01549
01550 }
|
|
|
Definition at line 1559 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), volume_write(), volume_zero(), and anova_options::xname.
01560 {
01561 float * ssijk = NULL; /* pointer to output data */
01562 float * y = NULL; /* pointer to input data */
01563 int i; /* factor A level index */
01564 int j; /* factor B level index */
01565 int m; /* observation number index */
01566 int a; /* number of levels for factor A */
01567 int b; /* number of levels for factor B */
01568 int n; /* number of observations per cell */
01569 int ixyz, nxyz; /* voxel counters */
01570 int nvoxel; /* output voxel # */
01571
01572
01573 /*----- initialize local variables -----*/
01574 a = option_data->a;
01575 b = option_data->b;
01576 n = option_data->n;
01577 nxyz = option_data->nxyz;
01578 nvoxel = option_data->nvoxel;
01579
01580 /*----- allocate memory space for calculations -----*/
01581 ssijk = (float *) malloc(sizeof(float)*nxyz);
01582 y = (float *) malloc(sizeof(float)*nxyz);
01583 if ((ssijk == NULL) || (y == NULL))
01584 ANOVA_error ("unable to allocate sufficient memory");
01585
01586
01587 volume_zero (ssijk, nxyz);
01588
01589 for (i = 0; i < a; i++)
01590 {
01591 for (j = 0; j < b; j++)
01592 {
01593 for (m = 0; m < n; m++)
01594 {
01595 read_afni_data (option_data,
01596 option_data->xname[i][j][0][m], y);
01597
01598 for (ixyz = 0; ixyz < nxyz; ixyz++)
01599 ssijk[ixyz] += y[ixyz] * y[ixyz];
01600 }
01601 }
01602 }
01603
01604
01605 /*----- save the sum -----*/
01606 if (nvoxel > 0)
01607 printf ("SSIJK = %f \n", ssijk[nvoxel-1]);
01608 volume_write ("ssijk", ssijk, nxyz);
01609
01610 /*----- release memory -----*/
01611 free (y); y = NULL;
01612 free (ssijk); ssijk = NULL;
01613
01614 }
|
|
|
Definition at line 1433 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, volume_write(), and volume_zero().
01434 {
01435 float * ssj = NULL; /* pointer to output data */
01436 float * ysum = NULL; /* pointer to sum over observations */
01437 int a; /* number of levels for factor A */
01438 int b; /* number of levels for factor B */
01439 int n; /* number of observations per cell */
01440 int j; /* index for factor B levels */
01441 int ixyz, nxyz; /* voxel counters */
01442 int nvoxel; /* output voxel # */
01443 int nval; /* divisor of sum */
01444 char filename[MAX_NAME_LENGTH]; /* name of output file */
01445
01446
01447 /*----- initialize local variables -----*/
01448 a = option_data->a;
01449 b = option_data->b;
01450 n = option_data->n;
01451 nxyz = option_data->nxyz;
01452 nvoxel = option_data->nvoxel;
01453 nval = a * n;
01454
01455 /*----- allocate memory space for calculations -----*/
01456 ssj = (float *) malloc(sizeof(float)*nxyz);
01457 ysum = (float *) malloc(sizeof(float)*nxyz);
01458 if ((ssj == NULL) || (ysum == NULL))
01459 ANOVA_error ("unable to allocate sufficient memory");
01460
01461 volume_zero (ssj, nxyz);
01462
01463 /*----- loop over levels of factor B -----*/
01464 for (j = 0; j < b; j++)
01465 {
01466 /*----- sum over observations -----*/
01467 calculate_sum (option_data, -1, j, ysum);
01468
01469 /*----- add to ssj -----*/
01470 for (ixyz = 0; ixyz < nxyz; ixyz++)
01471 ssj[ixyz] += ysum[ixyz] * ysum[ixyz] / nval;
01472 }
01473
01474 /*----- save the sum -----*/
01475 if (nvoxel > 0)
01476 printf ("SSJ = %f \n", ssj[nvoxel-1]);
01477 strcpy (filename, "ssj");
01478 volume_write (filename, ssj, nxyz);
01479
01480
01481 /*----- release memory -----*/
01482 free (ysum); ysum = NULL;
01483 free (ssj); ssj = NULL;
01484
01485 }
|
|
|
Definition at line 1672 of file 3dANOVA2.c. References ANOVA_error(), free, malloc, anova_options::nvoxel, anova_options::nxyz, volume_read(), and volume_write(). Referenced by calculate_anova().
01673 {
01674 float * y = NULL; /* input data pointer */
01675 float * sstr = NULL; /* sstr data pointer */
01676 int ixyz, nxyz; /* voxel counters */
01677 int nvoxel; /* output voxel # */
01678
01679
01680 /*----- assign local variables -----*/
01681 nxyz = option_data->nxyz;
01682 nvoxel = option_data->nvoxel;
01683
01684 /*----- allocate memory space for calculations -----*/
01685 sstr = (float *) malloc (sizeof(float)*nxyz);
01686 y = (float *) malloc (sizeof(float)*nxyz);
01687 if ((y == NULL) || (sstr == NULL))
01688 ANOVA_error ("unable to allocate sufficient memory");
01689
01690
01691 /*----- calculate SSTR -----*/
01692 volume_read ("ssij", sstr, nxyz);
01693
01694 volume_read ("ss0", y, nxyz);
01695 for (ixyz = 0; ixyz < nxyz; ixyz++)
01696 sstr[ixyz] -= y[ixyz];
01697
01698
01699 /*----- protection against round-off error -----*/
01700 for (ixyz = 0; ixyz < nxyz; ixyz++)
01701 if (sstr[ixyz] < 0.0) sstr[ixyz] = 0.0;
01702
01703 /*----- save error sum of squares -----*/
01704 if (nvoxel > 0)
01705 printf ("SSTR = %f \n", sstr[nvoxel-1]);
01706 volume_write ("sstr", sstr, nxyz);
01707
01708 /*----- release memory -----*/
01709 free (y); y = NULL;
01710 free (sstr); sstr = NULL;
01711
01712 }
|
|
||||||||||||||||||||
|
Definition at line 961 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), volume_zero(), and anova_options::xname.
00963 {
00964 float * y = NULL; /* pointer to input data */
00965 int i, itop, ibot; /* factor A level index */
00966 int j, jtop, jbot; /* factor B level index */
00967 int m; /* observation number index */
00968 int a; /* number of levels for factor A */
00969 int b; /* number of levels for factor B */
00970 int n; /* number of observations per cell */
00971 int ixyz, nxyz; /* voxel counters */
00972 int nvoxel; /* output voxel # */
00973 char sum_label[MAX_NAME_LENGTH]; /* name of sum for print to screen */
00974 char str[MAX_NAME_LENGTH]; /* temporary string */
00975
00976
00977 /*----- initialize local variables -----*/
00978 a = option_data->a;
00979 b = option_data->b;
00980 n = option_data->n;
00981 nxyz = option_data->nxyz;
00982 nvoxel = option_data->nvoxel;
00983
00984 /*----- allocate memory space for calculations -----*/
00985 y = (float *) malloc(sizeof(float)*nxyz);
00986 if (y == NULL) ANOVA_error ("unable to allocate sufficient memory");
00987
00988
00989 /*----- set up summation limits -----*/
00990 if (ii < 0)
00991 { ibot = 0; itop = a; }
00992 else
00993 { ibot = ii; itop = ii+1; }
00994
00995 if (jj < 0)
00996 { jbot = 0; jtop = b; }
00997 else
00998 { jbot = jj; jtop = jj+1; }
00999
01000
01001 volume_zero (ysum, nxyz);
01002
01003 /*----- loop over levels of factor A -----*/
01004 for (i = ibot; i < itop; i++)
01005 {
01006 /*----- loop over levels of factor B -----*/
01007 for (j = jbot; j < jtop; j++)
01008 {
01009 /*----- sum observations within this cell -----*/
01010 for (m = 0; m < n; m++)
01011 {
01012 read_afni_data (option_data,
01013 option_data->xname[i][j][0][m], y);
01014 if (nvoxel > 0)
01015 printf ("y[%d][%d][%d] = %f \n",
01016 i+1, j+1, m+1, y[nvoxel-1]);
01017 for (ixyz = 0; ixyz < nxyz; ixyz++)
01018 ysum[ixyz] += y[ixyz];
01019 } /* m */
01020 } /* j */
01021 } /* i */
01022
01023
01024 /*----- print the sum for this cell -----*/
01025 if (nvoxel > 0)
01026 {
01027 strcpy (sum_label, "y");
01028 if (ii < 0)
01029 strcat (sum_label, "[.]");
01030 else
01031 {
01032 sprintf (str, "[%d]", ii+1);
01033 strcat (sum_label, str);
01034 }
01035 if (jj < 0)
01036 strcat (sum_label, "[.]");
01037 else
01038 {
01039 sprintf (str, "[%d]", jj+1);
01040 strcat (sum_label, str);
01041 }
01042 printf ("%s[.] = %f \n", sum_label, ysum[nvoxel-1]);
01043 }
01044
01045 /*----- release memory -----*/
01046 free (y); y = NULL;
01047
01048 }
|
|
||||||||||||||||||||
|
Definition at line 1100 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, free, i, malloc, anova_options::n, anova_options::nvoxel, anova_options::nxyz, read_afni_data(), and anova_options::xname. Referenced by calculate_ameans().
01102 {
01103 double * yd = NULL; /* for accuracy */
01104 float * y = NULL; /* pointer to input data */
01105 int i, itop, ibot; /* factor A level index */
01106 int j, jtop, jbot; /* factor B level index */
01107 int m; /* observation number index */
01108 int a; /* number of levels for factor A */
01109 int b; /* number of levels for factor B */
01110 int n; /* number of observations per cell */
01111 int ixyz, nxyz; /* voxel counters */
01112 int nvoxel; /* output voxel # */
01113 char sum_label[MAX_NAME_LENGTH]; /* name of sum for print to screen */
01114 char str[MAX_NAME_LENGTH]; /* temporary string */
01115
01116
01117 /*----- initialize local variables -----*/
01118 a = option_data->a;
01119 b = option_data->b;
01120 n = option_data->n;
01121 nxyz = option_data->nxyz;
01122 nvoxel = option_data->nvoxel;
01123
01124 /*----- allocate memory space for calculations -----*/
01125 y = (float *) malloc(sizeof(float)*nxyz);
01126 yd = (double *) malloc(sizeof(double)*nxyz);
01127 if (!y || !yd) ANOVA_error ("sum_sq: unable to allocate sufficient memory");
01128
01129 /*----- set up summation limits -----*/
01130 if (ii < 0) { ibot = 0; itop = a; }
01131 else { ibot = ii; itop = ii+1; }
01132
01133 if (jj < 0) { jbot = 0; jtop = b; }
01134 else { jbot = jj; jtop = jj+1; }
01135
01136 for (ixyz = 0; ixyz < nxyz; ixyz++) /* init to zero */
01137 yd[ixyz] = 0.0;
01138
01139 /*----- loop over levels of factor A -----*/
01140 for (i = ibot; i < itop; i++)
01141 /*----- loop over levels of factor B -----*/
01142 for (j = jbot; j < jtop; j++)
01143 /*----- sum observations within this cell -----*/
01144 for (m = 0; m < n; m++)
01145 {
01146 read_afni_data (option_data, option_data->xname[i][j][0][m], y);
01147 if (nvoxel > 0)
01148 printf ("y[%d][%d][%d] = %f \n", i+1, j+1, m+1, y[nvoxel-1]);
01149 for (ixyz = 0; ixyz < nxyz; ixyz++)
01150 yd[ixyz] += y[ixyz] * y[ixyz];
01151 }
01152
01153 /*----- now copy results to float output -----*/
01154 for (ixyz = 0; ixyz < nxyz; ixyz++)
01155 ysum[ixyz] = yd[ixyz];
01156
01157 /*----- print the sum for this cell -----*/
01158 if (nvoxel > 0)
01159 {
01160 strcpy (sum_label, "y");
01161 if (ii < 0)
01162 strcat (sum_label, "[.]");
01163 else
01164 {
01165 sprintf (str, "[%d]", ii+1);
01166 strcat (sum_label, str);
01167 }
01168 if (jj < 0)
01169 strcat (sum_label, "[.]");
01170 else
01171 {
01172 sprintf (str, "[%d]", jj+1);
01173 strcat (sum_label, str);
01174 }
01175 printf ("%s_squares[.] = %f \n", sum_label, ysum[nvoxel-1]);
01176 }
01177
01178 /*----- release memory -----*/
01179 free (y); y = NULL;
01180 free (yd); yd = NULL;
01181 }
|
|
||||||||||||||||||||||||
|
Definition at line 1065 of file 3dANOVA2.c. References mp. Referenced by calculate_acontrasts(), calculate_adifferences(), and calculate_ameans().
01067 {
01068 const float EPSILON = 1.0e-10; /* protect against divide by zero */
01069 double dval;
01070 float *res, *mp, *ssp, sval;
01071 int index, df_prod;
01072
01073 /* set df_prod and use pointers, for slight speed improvement */
01074 df_prod = df * (df + 1);
01075
01076 res = result;
01077 mp = mean;
01078 ssp = sum_sq;
01079 for (index = 0; index < nvox; index++)
01080 {
01081 sval = *mp; /* for repeated use */
01082 dval = *ssp - (df+1.0) * sval * sval;
01083
01084 if (dval < EPSILON) *res = 0.0;
01085 else *res = sval * sqrt( df_prod / dval );
01086
01087 res++; mp++; ssp++;
01088 }
01089 }
|
|
|
Definition at line 2982 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, c, calculate_sum(), free, malloc, anova_options::n, anova_options::num_xcontr, anova_options::nvoxel, anova_options::nxyz, volume_read(), volume_zero(), write_afni_data(), anova_options::xcname, and anova_options::xcontr. Referenced by analyze_results().
02983 {
02984 const float EPSILON = 1.0e-10; /* protect against divide by zero */
02985 float * contr = NULL; /* pointer to contrast estimate */
02986 float * tcontr = NULL; /* pointer to t-statistic data */
02987 int a; /* number of levels for factor A */
02988 int b; /* number of levels for factor B */
02989 int ixyz, nxyz; /* voxel counters */
02990 int nvoxel; /* output voxel # */
02991 int num_contr; /* number of user requested contrasts */
02992 int icontr; /* index of user requested contrast */
02993 int ilevel, jlevel; /* factor level indices */
02994 int df; /* degrees of freedom for t-test */
02995 int n; /* number of observations per cell */
02996 float fval; /* for calculating std. dev. */
02997 float c; /* contrast coefficient */
02998 float stddev; /* est. std. dev. of contrast */
02999
03000
03001 /*----- initialize local variables -----*/
03002 a = option_data->a;
03003 b = option_data->b;
03004 n = option_data->n;
03005 num_contr = option_data->num_xcontr;
03006 nxyz = option_data->nxyz;
03007 nvoxel = option_data->nvoxel;
03008
03009 /*----- allocate memory space for calculations -----*/
03010 contr = (float *) malloc(sizeof(float)*nxyz);
03011 tcontr = (float *) malloc(sizeof(float)*nxyz);
03012 if ((contr == NULL) || (tcontr == NULL))
03013 ANOVA_error ("unable to allocate sufficient memory");
03014
03015
03016 /*----- loop over user specified constrasts -----*/
03017 for (icontr = 0; icontr < num_contr; icontr++)
03018 {
03019 volume_zero (contr, nxyz);
03020 fval = 0.0;
03021
03022 for (ilevel = 0; ilevel < a; ilevel++)
03023 for (jlevel = 0; jlevel < b; jlevel++)
03024 {
03025 c = option_data->xcontr[icontr][ilevel][jlevel];
03026 if (c == 0.0) continue;
03027
03028 /*----- add c * cell mean to contrast -----*/
03029 calculate_sum (option_data, ilevel, jlevel, tcontr);
03030 fval += c * c / n;
03031 for (ixyz = 0; ixyz < nxyz; ixyz++)
03032 contr[ixyz] += c * tcontr[ixyz] / n;
03033 }
03034 if (nvoxel > 0)
03035 printf ("No.%d contrast for cell means = %f \n",
03036 icontr+1, contr[nvoxel-1]);
03037
03038 /*----- divide by estimated standard deviation of the contrast -----*/
03039 volume_read ("sse", tcontr, nxyz);
03040 df = a * b * (n-1);
03041 for (ixyz = 0; ixyz < nxyz; ixyz++)
03042 {
03043 stddev = sqrt ((tcontr[ixyz] / df) * fval);
03044 if (stddev < EPSILON)
03045 tcontr[ixyz] = 0.0;
03046 else
03047 tcontr[ixyz] = contr[ixyz] / stddev;
03048 }
03049
03050 if (nvoxel > 0)
03051 printf ("t-stat for No.%d contrast for cell means = %f \n",
03052 icontr+1, tcontr[nvoxel-1]);
03053
03054 /*----- write out afni data file -----*/
03055 write_afni_data (option_data, option_data->xcname[icontr],
03056 contr, tcontr, a*b*(n-1), 0);
03057
03058 }
03059
03060 /*----- release memory -----*/
03061 free (tcontr); tcontr = NULL;
03062 free (contr); contr = NULL;
03063
03064 }
|
|
|
Definition at line 2704 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, malloc, anova_options::n, anova_options::num_xdiffs, anova_options::nvoxel, anova_options::nxyz, volume_read(), write_afni_data(), anova_options::xdiffs, and anova_options::xdname.
02705 {
02706 const float EPSILON = 1.0e-10; /* protect against divide by zero */
02707 float * diff = NULL; /* pointer to est. diff. in means */
02708 float * tdiff = NULL; /* pointer to t-statistic data */
02709 int a; /* number of levels for factor A */
02710 int b; /* number of levels for factor B */
02711 int ixyz, nxyz; /* voxel counters */
02712 int nvoxel; /* output voxel # */
02713 int num_diffs; /* number of user requested diffs. */
02714 int idiff; /* index for requested differences */
02715 int ia, ib, ja, jb; /* cell indices */
02716 int n; /* number of observations per cell */
02717 int df; /* degrees of freedom for t-test */
02718 float fval; /* for calculating std. dev. */
02719 float stddev; /* est. std. dev. of difference */
02720
02721
02722 /*----- initialize local variables -----*/
02723 a = option_data->a;
02724 b = option_data->b;
02725 n = option_data->n;
02726 df = a*b*(n-1);
02727 num_diffs = option_data->num_xdiffs;
02728 nxyz = option_data->nxyz;
02729 nvoxel = option_data->nvoxel;
02730
02731 /*----- allocate memory space for calculations -----*/
02732 diff = (float *) malloc(sizeof(float)*nxyz);
02733 tdiff = (float *) malloc(sizeof(float)*nxyz);
02734 if ((diff == NULL) || (tdiff == NULL))
02735 ANOVA_error ("unable to allocate sufficient memory");
02736
02737 /*----- loop over user specified treatment differences -----*/
02738 for (idiff = 0; idiff < num_diffs; idiff++)
02739 {
02740
02741 /*----- calculate first cell mean -----*/
02742 ia = option_data->xdiffs[idiff][0][0];
02743 ib = option_data->xdiffs[idiff][0][1];
02744 calculate_sum (option_data, ia, ib, diff);
02745 for (ixyz = 0; ixyz < nxyz; ixyz++)
02746 diff[ixyz] = diff[ixyz] / n;
02747
02748 /*----- subtract second cell mean -----*/
02749 ja = option_data->xdiffs[idiff][1][0];
02750 jb = option_data->xdiffs[idiff][1][1];
02751 calculate_sum (option_data, ja, jb, tdiff);
02752 for (ixyz = 0; ixyz < nxyz; ixyz++)
02753 diff[ixyz] -= tdiff[ixyz] / n;
02754 if (nvoxel > 0)
02755 printf ("Difference of Cell[%d][%d] - Cell[%d][%d] = %f \n",
02756 ia+1, ib+1, ja+1, jb+1, diff[nvoxel-1]);
02757
02758 /*----- divide by estimated standard deviation of difference -----*/
02759 volume_read ("sse", tdiff, nxyz);
02760 fval = (1.0 / df) * (2.0 / n);
02761 for (ixyz = 0; ixyz < nxyz; ixyz++)
02762 {
02763 stddev = sqrt (tdiff[ixyz] * fval);
02764 if (stddev < EPSILON)
02765 tdiff[ixyz] = 0.0;
02766 else
02767 tdiff[ixyz] = diff[ixyz] / stddev;
02768 }
02769
02770 if (nvoxel > 0)
02771 printf ("t-stat for Cell[%d][%d] - Cell[%d][%d] = %f \n",
02772 ia+1, ib+1, ja+1, jb+1, tdiff[nvoxel-1]);
02773
02774 /*----- write out afni data file -----*/
02775 write_afni_data (option_data, option_data->xdname[idiff],
02776 diff, tdiff, df, 0);
02777
02778 }
02779
02780 /*----- release memory -----*/
02781 free (tdiff); tdiff = NULL;
02782 free (diff); diff = NULL;
02783
02784 }
|
|
|
Definition at line 2421 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, calculate_sum(), free, malloc, anova_options::n, anova_options::nt, anova_options::num_xmeans, anova_options::nvoxel, anova_options::nxyz, volume_read(), write_afni_data(), anova_options::xmeans, and anova_options::xmname.
02422 {
02423 const float EPSILON = 1.0e-10; /* protect against divide by zero */
02424 float * mean = NULL; /* pointer to treatment mean data */
02425 float * tmean = NULL; /* pointer to t-statistic data */
02426 int imean; /* output mean option index */
02427 int alevel; /* factor A level index */
02428 int blevel; /* factor B level index */
02429 int n; /* number of observations per cell */
02430 int ixyz, nxyz; /* voxel counters */
02431 int nvoxel; /* output voxel # */
02432 int a; /* number of levels for factor A */
02433 int b; /* number of levels for factor B */
02434 int nt; /* total number of observations */
02435 int num_means; /* number of user requested means */
02436 int df; /* degrees of freedom for t-test */
02437 float fval; /* for calculating std. dev. */
02438 float stddev; /* est. std. dev. of cell mean */
02439
02440
02441 /*----- initialize local variables -----*/
02442 a = option_data->a;
02443 b = option_data->b;
02444 n = option_data->n;
02445 df = a * b * (n-1);
02446 nt = option_data->nt;
02447 num_means = option_data->num_xmeans;
02448 nxyz = option_data->nxyz;
02449 nvoxel = option_data->nvoxel;
02450
02451 /*----- allocate memory space for calculations -----*/
02452 mean = (float *) malloc(sizeof(float)*nxyz);
02453 tmean = (float *) malloc(sizeof(float)*nxyz);
02454 if ((mean == NULL) || (tmean == NULL))
02455 ANOVA_error ("unable to allocate sufficient memory");
02456
02457 /*----- loop over user specified treatment means -----*/
02458 for (imean = 0; imean < num_means; imean++)
02459 {
02460 alevel = option_data->xmeans[imean][0];
02461 blevel = option_data->xmeans[imean][1];
02462
02463 /*----- estimate mean for this cell -----*/
02464 calculate_sum (option_data, alevel, blevel, mean);
02465 for (ixyz = 0; ixyz < nxyz; ixyz++)
02466 mean[ixyz] = mean[ixyz] / n;
02467 if (nvoxel > 0)
02468 printf ("Mean of Cell[%d][%d] = %f \n",
02469 alevel+1, blevel+1, mean[nvoxel-1]);
02470
02471 /*----- divide by estimated standard deviation of cell mean -----*/
02472 volume_read ("sse", tmean, nxyz);
02473 fval = (1.0 / df) * (1.0 / n);
02474 for (ixyz = 0; ixyz < nxyz; ixyz++)
02475 {
02476 stddev = sqrt(tmean[ixyz] * fval);
02477 if (stddev < EPSILON)
02478 tmean[ixyz] = 0.0;
02479 else
02480 tmean[ixyz] = mean[ixyz] / stddev;
02481 }
02482 if (nvoxel > 0)
02483 printf ("t-stat for Mean of Cell[%d][%d] = %f \n",
02484 alevel+1, blevel+1, tmean[nvoxel-1]);
02485
02486 /*----- write out afni data file -----*/
02487 write_afni_data (option_data, option_data->xmname[imean],
02488 mean, tmean, df, 0);
02489
02490 }
02491
02492 /*----- release memory -----*/
02493 free (tmean); tmean = NULL;
02494 free (mean); mean = NULL;
02495 }
|
|
|
Definition at line 788 of file 3dANOVA2.c. References anova_options::a, a, ANOVA_error(), anova_options::b, anova_options::model, anova_options::n, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, and anova_options::num_xmeans.
00789 {
00790 int a, b; /* number of factor levels */
00791 int n; /* number of observations per cell */
00792
00793
00794 /*----- initialize local variables -----*/
00795 a = option_data->a;
00796 b = option_data->b;
00797 n = option_data->n;
00798
00799
00800 /*----- check for valid inputs -----*/
00801 if (a < 2) ANOVA_error ("must specify number of factor A levels (a>1) ");
00802 if (b < 2) ANOVA_error ("must specify number of factor B levels (b>1) ");
00803 if (n < 1) ANOVA_error ("sample size is too small");
00804
00805 switch (option_data->model)
00806 {
00807 case 1: /* fixed effects */
00808 if (n == 1)
00809 ANOVA_error ("sample size is too small for fixed effects model");
00810 break;
00811 case 2: /* random effects */
00812 if (option_data->nftr > 0)
00813 ANOVA_error ("-ftr is inappropriate for random effects model");
00814 if (option_data->num_ameans > 0)
00815 ANOVA_error ("-amean is inappropriate for random effects model");
00816 if (option_data->num_bmeans > 0)
00817 ANOVA_error ("-bmean is inappropriate for random effects model");
00818 if (option_data->num_xmeans > 0)
00819 ANOVA_error ("-xmean is inappropriate for random effects model");
00820 if (option_data->num_adiffs > 0)
00821 ANOVA_error ("-adiff is inappropriate for random effects model");
00822 if (option_data->num_bdiffs > 0)
00823 ANOVA_error ("-bdiff is inappropriate for random effects model");
00824 if (option_data->num_xdiffs > 0)
00825 ANOVA_error ("-xdiff is inappropriate for random effects model");
00826 if (option_data->num_acontr > 0)
00827 ANOVA_error ("-acontr is inappropriate for random effects model");
00828 if (option_data->num_bcontr > 0)
00829 ANOVA_error ("-bcontr is inappropriate for random effects model");
00830 if (option_data->num_xcontr > 0)
00831 ANOVA_error ("-xcontr is inappropriate for random effects model");
00832 if ((n == 1) && (option_data->nfab > 0))
00833 ANOVA_error ("sample size too small to calculate F-interaction");
00834 break;
00835 case 3: /* mixed effects */
00836 if (option_data->nftr > 0)
00837 ANOVA_error ("-ftr is inappropriate for mixed effects model");
00838 if (option_data->num_bmeans > 0)
00839 ANOVA_error ("-bmean is inappropriate for mixed effects model");
00840 if (option_data->num_xmeans > 0)
00841 ANOVA_error ("-xmean is inappropriate for mixed effects model");
00842 if (option_data->num_bdiffs > 0)
00843 ANOVA_error ("-bdiff is inappropriate for mixed effects model");
00844 if (option_data->num_xdiffs > 0)
00845 ANOVA_error ("-xdiff is inappropriate for mixed effects model");
00846 if (option_data->num_bcontr > 0)
00847 ANOVA_error ("-bcontr is inappropriate for mixed effects model");
00848 if (option_data->num_xcontr > 0)
00849 ANOVA_error ("-xcontr is inappropriate for mixed effects model");
00850 if ((n == 1) && (option_data->nfab > 0))
00851 ANOVA_error ("sample size too small to calculate F-interaction");
00852 if ((n == 1) && (option_data->nfb > 0))
00853 ANOVA_error ("sample size too small to calculate F for B effect");
00854 break;
00855 }
00856
00857 }
|
|
|
Definition at line 725 of file 3dANOVA2.c. References anova_options::acname, anova_options::adname, anova_options::amname, anova_options::bcname, anova_options::bdname, anova_options::bmname, anova_options::bucket_filename, check_one_output_file(), anova_options::fabname, anova_options::faname, anova_options::fbname, anova_options::ftrname, i, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, anova_options::num_xmeans, anova_options::xcname, anova_options::xdname, and anova_options::xmname.
00726 {
00727 int i; /* index */
00728
00729 if (option_data->nftr > 0)
00730 check_one_output_file (option_data, option_data->ftrname);
00731
00732 if (option_data->nfa > 0)
00733 check_one_output_file (option_data, option_data->faname);
00734
00735 if (option_data->nfb > 0)
00736 check_one_output_file (option_data, option_data->fbname);
00737
00738 if (option_data->nfab > 0)
00739 check_one_output_file (option_data, option_data->fabname);
00740
00741 if (option_data->num_ameans > 0)
00742 for (i = 0; i < option_data->num_ameans; i++)
00743 check_one_output_file (option_data, option_data->amname[i]);
00744
00745 if (option_data->num_bmeans > 0)
00746 for (i = 0; i < option_data->num_bmeans; i++)
00747 check_one_output_file (option_data, option_data->bmname[i]);
00748
00749 if (option_data->num_xmeans > 0)
00750 for (i = 0; i < option_data->num_xmeans; i++)
00751 check_one_output_file (option_data, option_data->xmname[i]);
00752
00753 if (option_data->num_adiffs > 0)
00754 for (i = 0; i < option_data->num_adiffs; i++)
00755 check_one_output_file (option_data, option_data->adname[i]);
00756
00757 if (option_data->num_bdiffs > 0)
00758 for (i = 0; i < option_data->num_bdiffs; i++)
00759 check_one_output_file (option_data, option_data->bdname[i]);
00760
00761 if (option_data->num_xdiffs > 0)
00762 for (i = 0; i < option_data->num_xdiffs; i++)
00763 check_one_output_file (option_data, option_data->xdname[i]);
00764
00765 if (option_data->num_acontr > 0)
00766 for (i = 0; i < option_data->num_acontr; i++)
00767 check_one_output_file (option_data, option_data->acname[i]);
00768
00769 if (option_data->num_bcontr > 0)
00770 for (i = 0; i < option_data->num_bcontr; i++)
00771 check_one_output_file (option_data, option_data->bcname[i]);
00772
00773 if (option_data->num_xcontr > 0)
00774 for (i = 0; i < option_data->num_xcontr; i++)
00775 check_one_output_file (option_data, option_data->xcname[i]);
00776
00777 if (option_data->bucket_filename != NULL)
00778 check_one_output_file (option_data, option_data->bucket_filename);
00779
00780 }
|
|
|
Definition at line 703 of file 3dANOVA2.c. References check_one_temporary_file().
00704 {
00705
00706 check_one_temporary_file ("ss0");
00707 check_one_temporary_file ("ssi");
00708 check_one_temporary_file ("ssj");
00709 check_one_temporary_file ("ssij");
00710 check_one_temporary_file ("ssijk");
00711
00712 check_one_temporary_file ("sse");
00713 check_one_temporary_file ("sstr");
00714 check_one_temporary_file ("ssa");
00715 check_one_temporary_file ("ssb");
00716 check_one_temporary_file ("ssab");
00717 }
|
|
|
Definition at line 3165 of file 3dANOVA2.c. References anova_options::acname, add_file_name(), ADN_directory_name, ADN_none, anova_options::adname, anova_options::amname, anova_options::bcname, anova_options::bdname, anova_options::bmname, anova_options::bucket_filename, DSET_IS_1D, DSET_IS_3D, EDIT_dset_items(), EDIT_empty_copy(), anova_options::fabname, anova_options::faname, anova_options::fbname, anova_options::first_dataset, anova_options::ftrname, i, ISVALID_3DIM_DATASET, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, anova_options::num_xmeans, anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), anova_options::xcname, anova_options::xdname, and anova_options::xmname.
03167 {
03168 char bucket_str[10000]; /* command line for program 3dbucket */
03169 char refit_str[10000]; /* command line for program 3drefit */
03170 THD_3dim_dataset * dset=NULL; /* input afni data set pointer */
03171 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */
03172 int i; /* file index */
03173 int ibrick; /* sub-brick index number */
03174 char str[100]; /* temporary character string */
03175
03176
03177 /*----- read first dataset -----*/
03178 dset = THD_open_dataset (option_data->first_dataset) ;
03179 if( ! ISVALID_3DIM_DATASET(dset) ){
03180 fprintf(stderr,"*** Unable to open dataset file %s\n",
03181 option_data->first_dataset);
03182 exit(1) ;
03183 }
03184
03185 if( DSET_IS_1D(dset) ) USE_1D_filenames(1) ; /* 14 Mar 2003 */
03186 else if( DSET_IS_3D(dset) ) USE_1D_filenames(3) ; /* 21 Mar 2003 */
03187
03188
03189 /*----- make an empty copy of this dataset -----*/
03190 new_dset = EDIT_empty_copy( dset ) ;
03191 THD_delete_3dim_dataset (dset , False); dset = NULL;
03192 EDIT_dset_items (new_dset,
03193 ADN_directory_name, option_data->session,
03194 ADN_none);
03195
03196
03197 /*----- begin command line for program 3dbucket -----*/
03198 strcpy (bucket_str, "3dbucket");
03199 strcat (bucket_str, " -prefix ");
03200 strcat (bucket_str, option_data->bucket_filename);
03201
03202
03203 /*----- begin command line for program 3drefit -----*/
03204 strcpy (refit_str, "3drefit ");
03205 ibrick = -1;
03206
03207
03208 /*----- make F-stat for treatment sub-bricks -----*/
03209 if (option_data->nftr != 0)
03210 {
03211 add_file_name (new_dset, option_data->ftrname, bucket_str);
03212
03213 ibrick++;
03214 sprintf (str, " -sublabel %d %s:Inten ",
03215 ibrick, option_data->ftrname);
03216 strcat (refit_str, str);
03217
03218 ibrick++;
03219 sprintf (str, " -sublabel %d %s:F-stat ",
03220 ibrick, option_data->ftrname);
03221 strcat (refit_str, str);
03222 }
03223
03224
03225 /*----- make F-stat for factor A sub-bricks -----*/
03226 if (option_data->nfa != 0)
03227 {
03228 add_file_name (new_dset, option_data->faname, bucket_str);
03229
03230 ibrick++;
03231 sprintf (str, " -sublabel %d %s:Inten ",
03232 ibrick, option_data->faname);
03233 strcat (refit_str, str);
03234
03235 ibrick++;
03236 sprintf (str, " -sublabel %d %s:F-stat ",
03237 ibrick, option_data->faname);
03238 strcat (refit_str, str);
03239 }
03240
03241
03242 /*----- make F-stat for factor B sub-bricks -----*/
03243 if (option_data->nfb != 0)
03244 {
03245 add_file_name (new_dset, option_data->fbname, bucket_str);
03246
03247 ibrick++;
03248 sprintf (str, " -sublabel %d %s:Inten ",
03249 ibrick, option_data->fbname);
03250 strcat (refit_str, str);
03251
03252 ibrick++;
03253 sprintf (str, " -sublabel %d %s:F-stat ",
03254 ibrick, option_data->fbname);
03255 strcat (refit_str, str);
03256 }
03257
03258
03259 /*----- make F-stat for A*B interaction sub-bricks -----*/
03260 if (option_data->nfab != 0)
03261 {
03262 add_file_name (new_dset, option_data->fabname, bucket_str);
03263
03264 ibrick++;
03265 sprintf (str, " -sublabel %d %s:Inten ",
03266 ibrick, option_data->fabname);
03267 strcat (refit_str, str);
03268
03269 ibrick++;
03270 sprintf (str, " -sublabel %d %s:F-stat ",
03271 ibrick, option_data->fabname);
03272 strcat (refit_str, str);
03273 }
03274
03275
03276 /*----- make factor A level mean sub-bricks -----*/
03277 if (option_data->num_ameans > 0)
03278 for (i = 0; i < option_data->num_ameans; i++)
03279 {
03280 add_file_name (new_dset, option_data->amname[i], bucket_str);
03281
03282 ibrick++;
03283 sprintf (str, " -sublabel %d %s:Mean ",
03284 ibrick, option_data->amname[i]);
03285 strcat (refit_str, str);
03286
03287 ibrick++;
03288 sprintf (str, " -sublabel %d %s:t-stat ",
03289 ibrick, option_data->amname[i]);
03290 strcat (refit_str, str);
03291 }
03292
03293
03294 /*----- make factor B level mean sub-bricks -----*/
03295 if (option_data->num_bmeans > 0)
03296 for (i = 0; i < option_data->num_bmeans; i++)
03297 {
03298 add_file_name (new_dset, option_data->bmname[i], bucket_str);
03299
03300 ibrick++;
03301 sprintf (str, " -sublabel %d %s:Mean ",
03302 ibrick, option_data->bmname[i]);
03303 strcat (refit_str, str);
03304
03305 ibrick++;
03306 sprintf (str, " -sublabel %d %s:t-stat ",
03307 ibrick, option_data->bmname[i]);
03308 strcat (refit_str, str);
03309 }
03310
03311
03312 /*----- make individual cell mean sub-bricks -----*/
03313 if (option_data->num_xmeans > 0)
03314 for (i = 0; i < option_data->num_xmeans; i++)
03315 {
03316 add_file_name (new_dset, option_data->xmname[i], bucket_str);
03317
03318 ibrick++;
03319 sprintf (str, " -sublabel %d %s:Mean ",
03320 ibrick, option_data->xmname[i]);
03321 strcat (refit_str, str);
03322
03323 ibrick++;
03324 sprintf (str, " -sublabel %d %s:t-stat ",
03325 ibrick, option_data->xmname[i]);
03326 strcat (refit_str, str);
03327 }
03328
03329
03330 /*----- make difference in factor A level means sub-bricks -----*/
03331 if (option_data->num_adiffs > 0)
03332 for (i = 0; i < option_data->num_adiffs; i++)
03333 {
03334 add_file_name (new_dset, option_data->adname[i], bucket_str);
03335
03336 ibrick++;
03337 sprintf (str, " -sublabel %d %s:Diff ",
03338 ibrick, option_data->adname[i]);
03339 strcat (refit_str, str);
03340
03341 ibrick++;
03342 sprintf (str, " -sublabel %d %s:t-stat ",
03343 ibrick, option_data->adname[i]);
03344 strcat (refit_str, str);
03345 }
03346
03347
03348 /*----- make difference in factor B level means sub-bricks -----*/
03349 if (option_data->num_bdiffs > 0)
03350 for (i = 0; i < option_data->num_bdiffs; i++)
03351 {
03352 add_file_name (new_dset, option_data->bdname[i], bucket_str);
03353
03354 ibrick++;
03355 sprintf (str, " -sublabel %d %s:Diff ",
03356 ibrick, option_data->bdname[i]);
03357 strcat (refit_str, str);
03358
03359 ibrick++;
03360 sprintf (str, " -sublabel %d %s:t-stat ",
03361 ibrick, option_data->bdname[i]);
03362 strcat (refit_str, str);
03363 }
03364
03365
03366 /*----- make difference in cell means sub-bricks -----*/
03367 if (option_data->num_xdiffs > 0)
03368 for (i = 0; i < option_data->num_xdiffs; i++)
03369 {
03370 add_file_name (new_dset, option_data->xdname[i], bucket_str);
03371
03372 ibrick++;
03373 sprintf (str, " -sublabel %d %s:Diff ",
03374 ibrick, option_data->xdname[i]);
03375 strcat (refit_str, str);
03376
03377 ibrick++;
03378 sprintf (str, " -sublabel %d %s:t-stat ",
03379 ibrick, option_data->xdname[i]);
03380 strcat (refit_str, str);
03381 }
03382
03383
03384 /*----- make contrast in factor A level means sub-brickss -----*/
03385 if (option_data->num_acontr > 0)
03386 for (i = 0; i < option_data->num_acontr; i++)
03387 {
03388 add_file_name (new_dset, option_data->acname[i], bucket_str);
03389
03390 ibrick++;
03391 sprintf (str, " -sublabel %d %s:Contr ",
03392 ibrick, option_data->acname[i]);
03393 strcat (refit_str, str);
03394
03395 ibrick++;
03396 sprintf (str, " -sublabel %d %s:t-stat ",
03397 ibrick, option_data->acname[i]);
03398 strcat (refit_str, str);
03399 }
03400
03401
03402 /*----- make contrast in factor B level means sub-bricks -----*/
03403 if (option_data->num_bcontr > 0)
03404 for (i = 0; i < option_data->num_bcontr; i++)
03405 {
03406 add_file_name (new_dset, option_data->bcname[i], bucket_str);
03407
03408 ibrick++;
03409 sprintf (str, " -sublabel %d %s:Contr ",
03410 ibrick, option_data->bcname[i]);
03411 strcat (refit_str, str);
03412
03413 ibrick++;
03414 sprintf (str, " -sublabel %d %s:t-stat ",
03415 ibrick, option_data->bcname[i]);
03416 strcat (refit_str, str);
03417 }
03418
03419
03420 /*----- make contrast in cell means sub-bricks -----*/
03421 if (option_data->num_xcontr > 0)
03422 for (i = 0; i < option_data->num_xcontr; i++)
03423 {
03424 add_file_name (new_dset, option_data->xcname[i], bucket_str);
03425
03426 ibrick++;
03427 sprintf (str, " -sublabel %d %s:Contr ",
03428 ibrick, option_data->xcname[i]);
03429 strcat (refit_str, str);
03430
03431 ibrick++;
03432 sprintf (str, " -sublabel %d %s:t-stat ",
03433 ibrick, option_data->xcname[i]);
03434 strcat (refit_str, str);
03435 }
03436
03437
03438 /*----- invoke program 3dbucket to generate bucket type output dataset
03439 by concatenating previous output files -----*/
03440 printf("Writing `bucket' dataset ");
03441 printf("into %s\n", option_data->bucket_filename);
03442
03443 fprintf(stderr,"RUNNING COMMAND: %s\n",bucket_str) ;
03444 system (bucket_str);
03445
03446
03447 /*----- invoke program 3drefit to label individual sub-bricks -----*/
03448 add_file_name (new_dset, option_data->bucket_filename, refit_str);
03449 fprintf(stderr,"RUNNING COMMAND: %s\n",refit_str) ;
03450 system (refit_str);
03451
03452
03453 /*----- release memory -----*/
03454 THD_delete_3dim_dataset (new_dset , False); new_dset = NULL;
03455
03456 }
|
|
|
Definition at line 85 of file 3dANOVA2.c. References MASTER_SHORTHELP_STRING.
00086 {
00087 printf
00088 (
00089 "This program performs two-factor ANOVA on 3D data sets \n\n"
00090 "Usage: \n"
00091 "3dANOVA2 \n"
00092 "-type k type of ANOVA model to be used: \n"
00093 " k=1 fixed effects model (A and B fixed) \n"
00094 " k=2 random effects model (A and B random) \n"
00095 " k=3 mixed effects model (A fixed, B random) \n"
00096 " \n"
00097 "-alevels a a = number of levels of factor A \n"
00098 "-blevels b b = number of levels of factor B \n"
00099 "-dset 1 1 filename data set for level 1 of factor A \n"
00100 " and level 1 of factor B \n"
00101 " . . . . . . \n"
00102 " \n"
00103 "-dset i j filename data set for level i of factor A \n"
00104 " and level j of factor B \n"
00105 " . . . . . . \n"
00106 " \n"
00107 "-dset a b filename data set for level a of factor A \n"
00108 " and level b of factor B \n"
00109 " \n"
00110 "[-voxel num] screen output for voxel # num \n"
00111 "[-diskspace] print out disk space required for \n"
00112 " program execution \n"
00113 " \n"
00114 " \n"
00115 "The following commands generate individual AFNI 2 sub-brick datasets: \n"
00116 " (In each case, output is written to the file with the specified \n"
00117 " prefix file name.) \n"
00118 " \n"
00119 "[-ftr prefix] F-statistic for treatment effect \n"
00120 "[-fa prefix] F-statistic for factor A effect \n"
00121 "[-fb prefix] F-statistic for factor B effect \n"
00122 "[-fab prefix] F-statistic for interaction \n"
00123 "[-amean i prefix] estimate mean of factor A level i \n"
00124 "[-bmean j prefix] estimate mean of factor B level j \n"
00125 "[-xmean i j prefix] estimate mean of cell at level i of \n"
00126 " factor A, level j of factor B \n"
00127 "[-adiff i j prefix] difference between levels i and j of \n"
00128 " factor A \n"
00129 "[-bdiff i j prefix] difference between levels i and j of \n"
00130 " factor B \n"
00131 "[-xdiff i j k l prefix] difference between cell mean at A=i,B=j \n"
00132 " and cell mean at A=k,B=l \n"
00133 "[-acontr c1 ... ca prefix] contrast in factor A levels \n"
00134 "[-bcontr c1 ... cb prefix] contrast in factor B levels \n"
00135 "[-xcontr c11 ... c1b c21 ... c2b ... ca1 ... cab prefix] \n"
00136 " contrast in cell means \n"
00137 " \n"
00138 " \n"
00139 "The following command generates one AFNI 'bucket' type dataset: \n"
00140 " \n"
00141 "[-bucket prefix] create one AFNI 'bucket' dataset whose \n"
00142 " sub-bricks are obtained by concatenating \n"
00143 " the above output files; the output 'bucket'\n"
00144 " is written to file with prefix file name \n"
00145 "\n");
00146
00147 printf
00148 (
00149 "\n"
00150 "N.B.: For this program, the user must specify 1 and only 1 sub-brick \n"
00151 " with each -dset command. That is, if an input dataset contains \n"
00152 " more than 1 sub-brick, a sub-brick selector must be used, e.g.: \n"
00153 " -dset 2 4 'fred+orig[3]' \n"
00154 );
00155
00156 printf("\n" MASTER_SHORTHELP_STRING ) ;
00157
00158 exit(0);
00159 }
|
|
||||||||||||||||
|
Definition at line 167 of file 3dANOVA2.c. References anova_options::a, anova_options::acname, anova_options::acontr, anova_options::adiffs, anova_options::adname, AFNI_logger(), anova_options::ameans, anova_options::amname, ANOVA_error(), argc, anova_options::b, anova_options::bcname, anova_options::bcontr, anova_options::bdiffs, anova_options::bdname, anova_options::bmeans, anova_options::bmname, anova_options::bucket_filename, anova_options::datum, anova_options::diskspace, display_help_menu(), DSET_NVALS, anova_options::fabname, anova_options::faname, anova_options::fbname, anova_options::ftrname, i, initialize_options(), ISVALID_3DIM_DATASET, malloc, MAX_CONTR, MAX_DIFFS, MAX_LEVELS, MAX_MEANS, anova_options::model, anova_options::n, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, anova_options::num_xmeans, anova_options::nvoxel, PROGRAM_NAME, anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), anova_options::xcname, anova_options::xcontr, anova_options::xdiffs, anova_options::xdname, anova_options::xmeans, anova_options::xmname, and anova_options::xname.
00168 {
00169 int nopt = 1; /* input option argument counter */
00170 int ival, jval; /* integer input */
00171 int i, j, k; /* factor level counters */
00172 int nij; /* number of data files in cell i,j */
00173 float fval; /* float input */
00174 THD_3dim_dataset * dset=NULL; /* test whether data set exists */
00175 char message[MAX_NAME_LENGTH]; /* error message */
00176 int n[MAX_LEVELS][MAX_LEVELS]; /* data file counters */
00177
00178
00179 /*----- does user request help menu? -----*/
00180 if (argc < 2 || strncmp(argv[1], "-help", 5) == 0) display_help_menu();
00181
00182 /*----- add to program log -----*/
00183 AFNI_logger (PROGRAM_NAME,argc,argv);
00184
00185 /*----- initialize the input options -----*/
00186 initialize_options (option_data);
00187
00188 /*----- initialize data file counters -----*/
00189 for (i = 0; i < MAX_LEVELS; i++)
00190 for (j = 0; j < MAX_LEVELS; j++)
00191 n[i][j] = 0;
00192
00193
00194 /*----- main loop over input options -----*/
00195 while (nopt < argc)
00196 {
00197
00198 /*----- allocate memory for storing data file names -----*/
00199 if ((option_data->xname == NULL) && (option_data->a > 0) &&
00200 (option_data->b > 0))
00201 {
00202 option_data->xname =
00203 (char *****) malloc (sizeof(char ****) * option_data->a);
00204 for (i = 0; i < option_data->a; i++)
00205 {
00206 option_data->xname[i] =
00207 (char ****) malloc (sizeof(char ***) * option_data->b);
00208 for (j = 0; j < option_data->b; j++)
00209 {
00210 option_data->xname[i][j] =
00211 (char ***) malloc (sizeof(char **) * 1);
00212 for (k = 0; k < 1; k++)
00213 {
00214 option_data->xname[i][j][k] =
00215 (char **) malloc (sizeof(char *) * MAX_OBSERVATIONS);
00216 }
00217 }
00218 }
00219 }
00220
00221
00222 /*----- -diskspace -----*/
00223 if( strncmp(argv[nopt],"-diskspace",5) == 0 )
00224 {
00225 option_data->diskspace = 1;
00226 nopt++ ; continue ; /* go to next arg */
00227 }
00228
00229
00230 /*----- -datum type -----*/
00231 if( strncmp(argv[nopt],"-datum",5) == 0 ){
00232 if( ++nopt >= argc ) ANOVA_error("need an argument after -datum!") ;
00233
00234 if( strcmp(argv[nopt],"short") == 0 ){
00235 option_data->datum = MRI_short ;
00236 } else if( strcmp(argv[nopt],"float") == 0 ){
00237 option_data->datum = MRI_float ;
00238 } else {
00239 char buf[256] ;
00240 sprintf(buf,"-datum of type '%s' is not supported in 3dANOVA2!",
00241 argv[nopt] ) ;
00242 ANOVA_error(buf) ;
00243 }
00244 nopt++ ; continue ; /* go to next arg */
00245 }
00246
00247
00248 /*----- -session dirname -----*/
00249 if( strncmp(argv[nopt],"-session",5) == 0 ){
00250 nopt++ ;
00251 if( nopt >= argc ) ANOVA_error("need argument after -session!") ;
00252 strcpy(option_data->session , argv[nopt++]) ;
00253 continue ;
00254 }
00255
00256
00257 /*----- -voxel num -----*/
00258 if (strncmp(argv[nopt], "-voxel", 6) == 0)
00259 {
00260 nopt++;
00261 if (nopt >= argc) ANOVA_error ("need argument after -voxel ");
00262 sscanf (argv[nopt], "%d", &ival);
00263 if (ival <= 0)
00264 ANOVA_error ("illegal argument after -voxel ");
00265 option_data->nvoxel = ival;
00266 nopt++;
00267 continue;
00268 }
00269
00270
00271 /*----- -type k -----*/
00272 if (strncmp(argv[nopt], "-type", 5) == 0)
00273 {
00274 nopt++;
00275 if (nopt >= argc) ANOVA_error ("need argument after -type ");
00276 sscanf (argv[nopt], "%d", &ival);
00277 if ((ival < 1) || (ival > 3))
00278 ANOVA_error ("illegal argument after -type ");
00279 option_data->model = ival;
00280 nopt++;
00281 continue;
00282 }
00283
00284
00285 /*----- -alevels a -----*/
00286 if (strncmp(argv[nopt], "-alevels", 5) == 0)
00287 {
00288 nopt++;
00289 if (nopt >= argc) ANOVA_error ("need argument after -alevels ");
00290 sscanf (argv[nopt], "%d", &ival);
00291 if ((ival <= 0) || (ival > MAX_LEVELS))
00292 ANOVA_error ("illegal argument after -alevels ");
00293 option_data->a = ival;
00294 nopt++;
00295 continue;
00296 }
00297
00298
00299 /*----- -blevels b -----*/
00300 if (strncmp(argv[nopt], "-blevels", 5) == 0)
00301 {
00302 nopt++;
00303 if (nopt >= argc) ANOVA_error ("need argument after -blevels ");
00304 sscanf (argv[nopt], "%d", &ival);
00305 if ((ival <= 0) || (ival > MAX_LEVELS))
00306 ANOVA_error ("illegal argument after -blevels ");
00307 option_data->b = ival;
00308 nopt++;
00309 continue;
00310 }
00311
00312
00313 /*----- -dset alevel blevel filename -----*/
00314 if (strncmp(argv[nopt], "-dset", 5) == 0)
00315 {
00316 nopt++;
00317 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -dset ");
00318 sscanf (argv[nopt], "%d", &ival);
00319 if ((ival <= 0) || (ival > option_data->a))
00320 ANOVA_error ("illegal argument after -dset ");
00321
00322 nopt++;
00323 sscanf (argv[nopt], "%d", &jval);
00324 if ((jval <= 0) || (jval > option_data->b))
00325 ANOVA_error ("illegal argument after -dset ");
00326
00327 n[ival-1][jval-1] += 1;
00328 nij = n[ival-1][jval-1];
00329 if (nij > MAX_OBSERVATIONS)
00330 ANOVA_error ("too many data files");
00331
00332 /*--- check whether input files exist ---*/
00333 nopt++;
00334 dset = THD_open_dataset( argv[nopt] ) ;
00335 if( ! ISVALID_3DIM_DATASET(dset) )
00336 {
00337 sprintf(message,"Unable to open dataset file %s\n",
00338 argv[nopt]);
00339 ANOVA_error (message);
00340 }
00341
00342 /*--- check number of selected sub-bricks ---*/
00343 if (DSET_NVALS(dset) != 1)
00344 {
00345 sprintf(message,"Must specify exactly 1 sub-brick for file %s\n",
00346 argv[nopt]);
00347 ANOVA_error (message);
00348 }
00349
00350 THD_delete_3dim_dataset( dset , False ) ; dset = NULL ;
00351
00352 option_data->xname[ival-1][jval-1][0][nij-1]
00353 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00354 strcpy (option_data->xname[ival-1][jval-1][0][nij-1], argv[nopt]);
00355 nopt++;
00356 continue;
00357 }
00358
00359
00360 /*----- -ftr filename -----*/
00361 if (strncmp(argv[nopt], "-ftr", 5) == 0)
00362 {
00363 nopt++;
00364 if (nopt >= argc) ANOVA_error ("need argument after -ftr ");
00365 option_data->nftr = 1;
00366 option_data->ftrname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00367 strcpy (option_data->ftrname, argv[nopt]);
00368 nopt++;
00369 continue;
00370 }
00371
00372
00373 /*----- -fa filename -----*/
00374 if (strncmp(argv[nopt], "-fa", 5) == 0)
00375 {
00376 nopt++;
00377 if (nopt >= argc) ANOVA_error ("need argument after -fa ");
00378 option_data->nfa = 1;
00379 option_data->faname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00380 strcpy (option_data->faname, argv[nopt]);
00381 nopt++;
00382 continue;
00383 }
00384
00385
00386 /*----- -fb filename -----*/
00387 if (strncmp(argv[nopt], "-fb", 5) == 0)
00388 {
00389 nopt++;
00390 if (nopt >= argc) ANOVA_error ("need argument after -fb ");
00391 option_data->nfb = 1;
00392 option_data->fbname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00393 strcpy (option_data->fbname, argv[nopt]);
00394 nopt++;
00395 continue;
00396 }
00397
00398
00399 /*----- -fab filename -----*/
00400 if (strncmp(argv[nopt], "-fab", 5) == 0)
00401 {
00402 nopt++;
00403 if (nopt >= argc) ANOVA_error ("need argument after -fab ");
00404 option_data->nfab = 1;
00405 option_data->fabname = malloc (sizeof(char) * MAX_NAME_LENGTH);
00406 strcpy (option_data->fabname, argv[nopt]);
00407 nopt++;
00408 continue;
00409 }
00410
00411
00412 /*----- -amean level filename -----*/
00413 if (strncmp(argv[nopt], "-amean", 5) == 0)
00414 {
00415 nopt++;
00416 if (nopt+1 >= argc) ANOVA_error ("need 2 arguments after -amean ");
00417
00418 option_data->num_ameans++;
00419 if (option_data->num_ameans > MAX_MEANS)
00420 ANOVA_error ("too many factor A level mean estimates");
00421
00422 sscanf (argv[nopt], "%d", &ival);
00423 if ((ival <= 0) || (ival > option_data->a))
00424 ANOVA_error ("illegal argument after -amean ");
00425 option_data->ameans[option_data->num_ameans-1] = ival - 1;
00426 nopt++;
00427
00428 option_data->amname[option_data->num_ameans-1]
00429 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00430 strcpy (option_data->amname[option_data->num_ameans-1], argv[nopt]);
00431 nopt++;
00432 continue;
00433 }
00434
00435
00436 /*----- -bmean level filename -----*/
00437 if (strncmp(argv[nopt], "-bmean", 5) == 0)
00438 {
00439 nopt++;
00440 if (nopt+1 >= argc) ANOVA_error ("need 2 arguments after -bmean ");
00441
00442 option_data->num_bmeans++;
00443 if (option_data->num_bmeans > MAX_MEANS)
00444 ANOVA_error ("too many factor B level mean estimates");
00445
00446 sscanf (argv[nopt], "%d", &ival);
00447 if ((ival <= 0) || (ival > option_data->b))
00448 ANOVA_error ("illegal argument after -bmean ");
00449 option_data->bmeans[option_data->num_bmeans-1] = ival - 1;
00450 nopt++;
00451
00452 option_data->bmname[option_data->num_bmeans-1]
00453 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00454 strcpy (option_data->bmname[option_data->num_bmeans-1], argv[nopt]);
00455 nopt++;
00456 continue;
00457 }
00458
00459
00460 /*----- -xmean i j filename -----*/
00461 if (strncmp(argv[nopt], "-xmean", 5) == 0)
00462 {
00463 nopt++;
00464 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -xmean ");
00465
00466 option_data->num_xmeans++;
00467 if (option_data->num_xmeans > MAX_MEANS)
00468 ANOVA_error ("too many cell mean estimates");
00469
00470 sscanf (argv[nopt], "%d", &ival);
00471 if ((ival <= 0) || (ival > option_data->a))
00472 ANOVA_error ("illegal argument after -xmean ");
00473 option_data->xmeans[option_data->num_xmeans-1][0] = ival - 1;
00474 nopt++;
00475
00476 sscanf (argv[nopt], "%d", &ival);
00477 if ((ival <= 0) || (ival > option_data->b))
00478 ANOVA_error ("illegal argument after -xmean ");
00479 option_data->xmeans[option_data->num_xmeans-1][1] = ival - 1;
00480 nopt++;
00481
00482 option_data->xmname[option_data->num_xmeans-1]
00483 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00484 strcpy (option_data->xmname[option_data->num_xmeans-1], argv[nopt]);
00485 nopt++;
00486 continue;
00487 }
00488
00489
00490 /*----- -adiff level1 level2 filename -----*/
00491 if (strncmp(argv[nopt], "-adiff", 5) == 0)
00492 {
00493 nopt++;
00494 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -adiff ");
00495
00496 option_data->num_adiffs++;
00497 if (option_data->num_adiffs > MAX_DIFFS)
00498 ANOVA_error ("too many factor A level differences");
00499
00500 sscanf (argv[nopt], "%d", &ival);
00501 if ((ival <= 0) || (ival > option_data->a))
00502 ANOVA_error ("illegal argument after -adiff ");
00503 option_data->adiffs[option_data->num_adiffs-1][0] = ival - 1;
00504 nopt++;
00505
00506 sscanf (argv[nopt], "%d", &ival);
00507 if ((ival <= 0) || (ival > option_data->a))
00508 ANOVA_error ("illegal argument after -adiff ");
00509 option_data->adiffs[option_data->num_adiffs-1][1] = ival - 1;
00510 nopt++;
00511
00512 option_data->adname[option_data->num_adiffs-1]
00513 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00514 strcpy (option_data->adname[option_data->num_adiffs-1], argv[nopt]);
00515 nopt++;
00516 continue;
00517 }
00518
00519
00520 /*----- -bdiff level1 level2 filename -----*/
00521 if (strncmp(argv[nopt], "-bdiff", 5) == 0)
00522 {
00523 nopt++;
00524 if (nopt+2 >= argc) ANOVA_error ("need 3 arguments after -bdiff ");
00525
00526 option_data->num_bdiffs++;
00527 if (option_data->num_bdiffs > MAX_DIFFS)
00528 ANOVA_error ("too many factor B level differences");
00529
00530 sscanf (argv[nopt], "%d", &ival);
00531 if ((ival <= 0) || (ival > option_data->b))
00532 ANOVA_error ("illegal argument after -bdiff ");
00533 option_data->bdiffs[option_data->num_bdiffs-1][0] = ival - 1;
00534 nopt++;
00535
00536 sscanf (argv[nopt], "%d", &ival);
00537 if ((ival <= 0) || (ival > option_data->b))
00538 ANOVA_error ("illegal argument after -bdiff ");
00539 option_data->bdiffs[option_data->num_bdiffs-1][1] = ival - 1;
00540 nopt++;
00541
00542 option_data->bdname[option_data->num_bdiffs-1]
00543 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00544 strcpy (option_data->bdname[option_data->num_bdiffs-1], argv[nopt]);
00545 nopt++;
00546 continue;
00547 }
00548
00549
00550 /*----- -xdiff i j k l filename -----*/
00551 if (strncmp(argv[nopt], "-xdiff", 5) == 0)
00552 {
00553 nopt++;
00554 if (nopt+4 >= argc) ANOVA_error ("need 5 arguments after -xdiff ");
00555
00556 option_data->num_xdiffs++;
00557 if (option_data->num_xdiffs > MAX_DIFFS)
00558 ANOVA_error ("too many cell means differences");
00559
00560 sscanf (argv[nopt], "%d", &ival);
00561 if ((ival <= 0) || (ival > option_data->a))
00562 ANOVA_error ("illegal argument after -xdiff ");
00563 option_data->xdiffs[option_data->num_xdiffs-1][0][0] = ival - 1;
00564 nopt++;
00565
00566 sscanf (argv[nopt], "%d", &ival);
00567 if ((ival <= 0) || (ival > option_data->b))
00568 ANOVA_error ("illegal argument after -xdiff ");
00569 option_data->xdiffs[option_data->num_xdiffs-1][0][1] = ival - 1;
00570 nopt++;
00571
00572 sscanf (argv[nopt], "%d", &ival);
00573 if ((ival <= 0) || (ival > option_data->a))
00574 ANOVA_error ("illegal argument after -xdiff ");
00575 option_data->xdiffs[option_data->num_xdiffs-1][1][0] = ival - 1;
00576 nopt++;
00577
00578 sscanf (argv[nopt], "%d", &ival);
00579 if ((ival <= 0) || (ival > option_data->b))
00580 ANOVA_error ("illegal argument after -xdiff ");
00581 option_data->xdiffs[option_data->num_xdiffs-1][1][1] = ival - 1;
00582 nopt++;
00583
00584 option_data->xdname[option_data->num_xdiffs-1]
00585 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00586 strcpy (option_data->xdname[option_data->num_xdiffs-1], argv[nopt]);
00587 nopt++;
00588 continue;
00589 }
00590
00591
00592 /*----- -acontr c1 ... cr filename -----*/
00593 if (strncmp(argv[nopt], "-acontr", 5) == 0)
00594 {
00595 nopt++;
00596 if (nopt + option_data->a >= argc)
00597 ANOVA_error ("need a+1 arguments after -acontr ");
00598
00599 option_data->num_acontr++;
00600 if (option_data->num_acontr > MAX_CONTR)
00601 ANOVA_error ("too many factor A level contrasts");
00602
00603 for (i = 0; i < option_data->a; i++)
00604 {
00605 sscanf (argv[nopt], "%f", &fval);
00606 option_data->acontr[option_data->num_acontr - 1][i] = fval ;
00607 nopt++;
00608 }
00609
00610 option_data->acname[option_data->num_acontr-1]
00611 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00612 strcpy (option_data->acname[option_data->num_acontr-1], argv[nopt]);
00613 nopt++;
00614 continue;
00615 }
00616
00617
00618 /*----- -bcontr c1 ... cr filename -----*/
00619 if (strncmp(argv[nopt], "-bcontr", 5) == 0)
00620 {
00621 nopt++;
00622 if (nopt + option_data->b >= argc)
00623 ANOVA_error ("need b+1 arguments after -bcontr ");
00624
00625 option_data->num_bcontr++;
00626 if (option_data->num_bcontr > MAX_CONTR)
00627 ANOVA_error ("too many factor B level contrasts");
00628
00629 for (i = 0; i < option_data->b; i++)
00630 {
00631 sscanf (argv[nopt], "%f", &fval);
00632 option_data->bcontr[option_data->num_bcontr - 1][i] = fval ;
00633 nopt++;
00634 }
00635
00636 option_data->bcname[option_data->num_bcontr-1]
00637 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00638 strcpy (option_data->bcname[option_data->num_bcontr-1], argv[nopt]);
00639 nopt++;
00640 continue;
00641 }
00642
00643
00644 /*--- -xcontr c11 ... c1b c21 ... c2b ... ca1 ... cab filename ---*/
00645 if (strncmp(argv[nopt], "-xcontr", 5) == 0)
00646 {
00647 nopt++;
00648 if (nopt + (option_data->a * option_data->b) >= argc)
00649 ANOVA_error ("need ab+1 arguments after -xcontr ");
00650
00651 option_data->num_xcontr++;
00652 if (option_data->num_xcontr > MAX_CONTR)
00653 ANOVA_error ("too many cell means contrasts");
00654
00655 for (i = 0; i < option_data->a; i++)
00656 for (j = 0; j < option_data->b; j++)
00657 {
00658 sscanf (argv[nopt], "%f", &fval);
00659 option_data->xcontr[option_data->num_xcontr - 1][i][j] = fval ;
00660 nopt++;
00661 }
00662
00663 option_data->xcname[option_data->num_xcontr-1]
00664 = malloc (sizeof(char) * MAX_NAME_LENGTH);
00665 strcpy (option_data->xcname[option_data->num_xcontr-1], argv[nopt]);
00666 nopt++;
00667 continue;
00668 }
00669
00670
00671 /*----- -bucket filename -----*/
00672 if (strncmp(argv[nopt], "-bucket", 4) == 0)
00673 {
00674 nopt++;
00675 if (nopt >= argc) ANOVA_error ("need argument after -bucket ");
00676 option_data->bucket_filename = malloc (sizeof(char)*MAX_NAME_LENGTH);
00677 strcpy (option_data->bucket_filename, argv[nopt]);
00678 nopt++;
00679 continue;
00680 }
00681
00682
00683 /*----- unknown command -----*/
00684 sprintf (message,"Unrecognized command line option: %s\n", argv[nopt]);
00685 ANOVA_error (message);
00686 }
00687
00688
00689 /*----- check that all treatment sample sizes are equal -----*/
00690 option_data->n = n[0][0];
00691 for (i = 0; i < option_data->a; i++)
00692 for (j = 0; j < option_data->b; j++)
00693 if (n[i][j] != option_data->n)
00694 ANOVA_error ("must have equal sample sizes for 3dANOVA2");
00695 }
|
|
||||||||||||||||
|
Definition at line 906 of file 3dANOVA2.c. References a, ANOVA_error(), argc, check_disk_space(), check_for_valid_inputs(), check_output_files(), check_temporary_files(), get_dimensions(), get_options(), malloc, PROGRAM_NAME, and tross_commandline().
00907 {
00908 int a, b; /* number of factor levels */
00909 int n; /* number of observations per cell */
00910
00911
00912 /*----- save command line for history notes -----*/
00913 commandline = tross_commandline( PROGRAM_NAME , argc,argv ) ;
00914
00915
00916 /*----- allocate memory space for input data -----*/
00917 *option_data = (anova_options *) malloc(sizeof(anova_options));
00918 if (*option_data == NULL)
00919 ANOVA_error ("memory allocation error");
00920
00921 /*----- get command line inputs -----*/
00922 get_options(argc, argv, *option_data);
00923
00924 /*----- use first data set to get data set dimensions -----*/
00925 (*option_data)->first_dataset = (*option_data)->xname[0][0][0][0];
00926 get_dimensions (*option_data);
00927 printf ("Data set dimensions: nx = %d ny = %d nz = %d nxyz = %d \n",
00928 (*option_data)->nx, (*option_data)->ny,
00929 (*option_data)->nz, (*option_data)->nxyz);
00930 if ((*option_data)->nvoxel > (*option_data)->nxyz)
00931 ANOVA_error ("argument of -voxel is too large");
00932
00933 /*----- initialize local variables -----*/
00934 a = (*option_data)->a;
00935 b = (*option_data)->b;
00936 n = (*option_data)->n;
00937
00938 /*----- total number of observations -----*/
00939 (*option_data)->nt = n * a * b;
00940
00941 /*----- check for valid inputs -----*/
00942 check_for_valid_inputs (*option_data);
00943
00944 /*----- check whether temporary files already exist -----*/
00945 check_temporary_files (*option_data);
00946
00947 /*----- check whether output files already exist -----*/
00948 check_output_files (*option_data);
00949
00950 /*----- check whether there is sufficient disk space -----*/
00951 if ((*option_data)->diskspace) check_disk_space (*option_data);
00952 }
|
|
||||||||||||
|
Definition at line 3593 of file 3dANOVA2.c. References addto_args(), analyze_results(), argc, calculate_anova(), free, initialize(), machdep(), PROGRAM_AUTHOR, PROGRAM_INITIAL, PROGRAM_LATEST, PROGRAM_NAME, and terminate().
03594 {
03595 anova_options * option_data = NULL;
03596
03597
03598 /*----- Identify software -----*/
03599 printf ("\n\n");
03600 printf ("Program: %s \n", PROGRAM_NAME);
03601 printf ("Author: %s \n", PROGRAM_AUTHOR);
03602 printf ("Initial Release: %s \n", PROGRAM_INITIAL);
03603 printf ("Latest Revision: %s \n", PROGRAM_LATEST);
03604 printf ("\n");
03605
03606 /*-- 20 Apr 2001: addto the arglist, if user wants to [RWCox] --*/
03607
03608 machdep() ;
03609 { int new_argc ; char ** new_argv ;
03610 addto_args( argc , argv , &new_argc , &new_argv ) ;
03611 if( new_argv != NULL ){ argc = new_argc ; argv = new_argv ; }
03612 }
03613
03614 /*----- program initialization -----*/
03615 initialize (argc, argv, &option_data);
03616
03617 /*----- calculate sums of squares -----*/
03618 calculate_anova (option_data);
03619
03620 /*----- generate requested output -----*/
03621 analyze_results (option_data);
03622
03623 /*----- terminate program -----*/
03624 terminate (option_data);
03625 free (option_data); option_data = NULL;
03626
03627 exit(0);
03628 }
|
|
|
Definition at line 866 of file 3dANOVA2.c. References anova_options::bucket_filename, max, anova_options::n, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, and anova_options::num_xmeans.
00867 {
00868 int now; /* number of disk files just prior
00869 to program termination */
00870 int nout; /* number of output files */
00871 int nmax; /* maximum number of disk files */
00872
00873
00874 if (option_data->n != 1)
00875 {
00876 nmax = 6; now = 5;
00877 }
00878 else
00879 {
00880 nmax = 5; now = 5;
00881 }
00882
00883 nout = option_data->nftr + option_data->nfab
00884 + option_data->nfa + option_data->nfb
00885 + option_data->num_ameans + option_data->num_bmeans + option_data->num_xmeans
00886 + option_data->num_adiffs + option_data->num_bdiffs + option_data->num_xdiffs
00887 + option_data->num_acontr + option_data->num_bcontr
00888 + option_data->num_xcontr;
00889
00890 now = now + nout;
00891
00892 nmax = max (now, nmax);
00893
00894 if (option_data->bucket_filename != NULL)
00895 nmax = max (nmax, 2*nout);
00896
00897 return (nmax);
00898 }
|
|
|
Definition at line 3466 of file 3dANOVA2.c. References anova_options::a, anova_options::acname, ADN_directory_name, ADN_none, anova_options::adname, anova_options::amname, anova_options::b, anova_options::bcname, anova_options::bdname, anova_options::bmname, anova_options::bucket_filename, create_bucket(), destroy_anova_options(), EDIT_dset_items(), EDIT_empty_copy(), anova_options::fabname, anova_options::faname, anova_options::fbname, anova_options::first_dataset, anova_options::ftrname, i, ISVALID_3DIM_DATASET, anova_options::nfa, anova_options::nfab, anova_options::nfb, anova_options::nftr, anova_options::num_acontr, anova_options::num_adiffs, anova_options::num_ameans, anova_options::num_bcontr, anova_options::num_bdiffs, anova_options::num_bmeans, anova_options::num_xcontr, anova_options::num_xdiffs, anova_options::num_xmeans, remove_dataset(), anova_options::session, THD_delete_3dim_dataset(), THD_open_dataset(), volume_delete(), anova_options::xcname, anova_options::xdname, and anova_options::xmname.
03467 {
03468 int i, j;
03469 THD_3dim_dataset * dset=NULL; /* input afni data set pointer */
03470 THD_3dim_dataset * new_dset=NULL; /* output afni data set pointer */
03471 char filename[MAX_NAME_LENGTH];
03472
03473
03474 /*----- remove temporary data files -----*/
03475 volume_delete ("sstr");
03476 volume_delete ("sse");
03477 volume_delete ("ssa");
03478 volume_delete ("ssb");
03479 volume_delete ("ssab");
03480 for (i = 0; i < option_data->a; i++)
03481 {
03482 sprintf (filename, "ya.%d", i);
03483 volume_delete (filename);
03484 }
03485 for (j = 0; j < option_data->b; j++)
03486 {
03487 sprintf (filename, "yb.%d", j);
03488 volume_delete (filename);
03489 }
03490
03491
03492 /*----- create bucket dataset -----*/
03493 if (option_data->bucket_filename != NULL)
03494 create_bucket (option_data);
03495
03496
03497 /*----- if 'bucket' datset was created, remove the individual 2-subbrick
03498 data files -----*/
03499 if (option_data->bucket_filename != NULL)
03500 {
03501
03502 /*----- read first dataset -----*/
03503 dset = THD_open_dataset (option_data->first_dataset) ;
03504 if( ! ISVALID_3DIM_DATASET(dset) ){
03505 fprintf(stderr,"*** Unable to open dataset file %s\n",
03506 option_data->first_dataset);
03507 exit(1) ;
03508 }
03509
03510 /*----- make an empty copy of this dataset -----*/
03511 new_dset = EDIT_empty_copy (dset);
03512 THD_delete_3dim_dataset (dset , False); dset = NULL;
03513 EDIT_dset_items (new_dset,
03514 ADN_directory_name, option_data->session,
03515 ADN_none);
03516
03517 /*----- remove F-stat for treatment data file -----*/
03518 if (option_data->nftr != 0)
03519 remove_dataset (new_dset, option_data->ftrname);
03520
03521 /*----- remove F-stat for factor A main effect data file -----*/
03522 if (option_data->nfa != 0)
03523 remove_dataset (new_dset, option_data->faname);
03524
03525 /*----- remove F-stat for factor B main effect data file -----*/
03526 if (option_data->nfb != 0)
03527 remove_dataset (new_dset, option_data->fbname);
03528
03529 /*----- remove F-stat for A*B interaction data file -----*/
03530 if (option_data->nfab != 0)
03531 remove_dataset (new_dset, option_data->fabname);
03532
03533 /*----- remove factor A level mean data files -----*/
03534 if (option_data->num_ameans > 0)
03535 for (i = 0; i < option_data->num_ameans; i++)
03536 remove_dataset (new_dset, option_data->amname[i]);
03537
03538 /*----- remove factor B level mean data files -----*/
03539 if (option_data->num_bmeans > 0)
03540 for (i = 0; i < option_data->num_bmeans; i++)
03541 remove_dataset (new_dset, option_data->bmname[i]);
03542
03543 /*----- remove individual cell mean data files -----*/
03544 if (option_data->num_xmeans > 0)
03545 for (i = 0; i < option_data->num_xmeans; i++)
03546 remove_dataset (new_dset, option_data->xmname[i]);
03547
03548 /*----- remove difference in factor A levels data files -----*/
03549 if (option_data->num_adiffs > 0)
03550 for (i = 0; i < option_data->num_adiffs; i++)
03551 remove_dataset (new_dset, option_data->adname[i]);
03552
03553 /*----- remove difference in factor B levels data files -----*/
03554 if (option_data->num_bdiffs > 0)
03555 for (i = 0; i < option_data->num_bdiffs; i++)
03556 remove_dataset (new_dset, option_data->bdname[i]);
03557
03558 /*----- remove difference in cell means data files -----*/
03559 if (option_data->num_xdiffs > 0)
03560 for (i = 0; i < option_data->num_xdiffs; i++)
03561 remove_dataset (new_dset, option_data->xdname[i]);
03562
03563 /*----- remove contrast in factor A levels data files -----*/
03564 if (option_data->num_acontr > 0)
03565 for (i = 0; i < option_data->num_acontr; i++)
03566 remove_dataset (new_dset, option_data->acname[i]);
03567
03568 /*----- remove contrast in factor B levels data files -----*/
03569 if (option_data->num_bcontr > 0)
03570 for (i = 0; i < option_data->num_bcontr; i++)
03571 remove_dataset (new_dset, option_data->bcname[i]);
03572
03573 /*----- remove contrast in cell means data files -----*/
03574 if (option_data->num_xcontr > 0)
03575 for (i = 0; i < option_data->num_xcontr; i++)
03576 remove_dataset (new_dset, option_data->xcname[i]);
03577
03578 THD_delete_3dim_dataset (new_dset , False); new_dset = NULL;
03579 }
03580
03581
03582 /*----- deallocate memory -----*/
03583 destroy_anova_options (option_data);
03584
03585 }
|