Z scr is loaded by the Summary program (menu option 14). The z-score program that follows combines the routines for the z-scores analysis using the Thompson et al. (1976)




Yüklə 85.61 Kb.
tarix28.02.2016
ölçüsü85.61 Kb.
Z Score Documentation
The z-score program in the file z.scr is loaded by the Summary program (menu option 14). The z-score program that follows combines the routines for the z-scores analysis using the Thompson et al. (1976) description, with the program for doing block z-scores analysis (originally the file called z.blk). The difference between the two routines is that the former uses all the trials to calculate the preCS mean and standard deviation that is used in the z-score calculation, whereas the latter only uses the trials on a block-by-block basis. The Thompson type analysis is used when the entire training session is the same (e.g., a session of acquisition training) and is helpful when trying to identify changes in baseline activity from block to block. The block analysis is used when there are blocks of normal training that need to be compared with some manipulation, for example drug or cooling. The Thompson type analysis is started with run and the block analysis is started with blkrun.

An additional feature of our implementation of the z-score analysis is that it uses the z-scores to identify trials with significant activity in the CS period (epochs 2 and 3) on paired trials and significant activity in the CS and US periods on tone-alone test trials (epochs 2, 3, 4, 5 and 6). By identifying conditioned responses, trials to criterion can be calculated based on significant z-scores. Because eyelid and unit activity are treated the same, trials to criterion can be calculated for either measure. Trials to criterion are commonly calculated for behavioral activity, but this is one of the few instances where trials to criterion can be calculated on the basis of unit activity.

As with the other programs in these appendices, this file has been modified in the following ways: comments have been expanded; screens have been idenfified by numbers; codes and comments used for debugging have been removed to avoid confusion (for example, we have edited out all the double number routines); screens have been combined when their separation served no compilation or documentary purpose; and for documentation, some additional screens concerning parameters, epochs and instructions have been included as comments.
\ screen 0

\ Z.BLK file

\

\ this program computes z-scores.



\ this program saves Ex for every trial in AUX (segment 3) as floating point numbers

\ (these are averages sums, not sums).

\

\ RAM DROP temporarily stores block and session information;



\ PAD could be used instead.

\

\ trial type 1 = CS alone, 2 = CS/UCS, 3 = UCS alone.



\

\ USE: RUN (all trial types) or BLKRUN (only paired trials)

\

\ REM critical z values:



\ one-tailed: 0.05, 1.65; 0.01, 2.32.

\ two-tailed: 0.05, 1.96; 0.01, 2.58.

\

\ Z.ORG contains the original z-score program.



\ Z.DBL holds a version that uses both dbl and flt pt AUX.

\ Z.FLT is the basic version used for Z.SCR and Z.BLK.

\ Z.BLK does independent block z scores also.
\ screen 1

\ this screen controls all loading of the z-score routines.


NEED ZSCORES NOT \if forget zscores

NEED FLOAT \if reloading float

\ Micromotion MasterForth's floating point does not include the following definitions ...

NEED FSQR \if : fsqr ( fn -- fn2) fdup f* ;

NEED F<= \if : f<= ( f1 f2--t/f) fover fover f< >r f= r> or ;
decimal
create zscores
create z.blk
NEED D#BYTES \if 4 constant d#bytes
\ 2 load \ parameters documentation.

\ 3 load \ ranges documentation.

4 size 2- thru \ major program.

\ size 1- load \ instruction documentation.


decimal
\ roadrunner
\ screen 2

\ parameter documentation.

\ this information or information like it is loaded by the Summary program and is needed for

\ using the z-score program.

\

\ 1 #a/d ! \ number of a/d channels.



\ 2 #units ! \ number of unit channels.

\ 4000 bin ! \ binwidth in microseconds.

\ 252 scale toneon \ tone onset.

\ 252 2* scale shkon \ shkon 2- is shkon \ shock onset.

\ 252 3 * scale pts \ length of trial; number of data points per channel.

\ 3 types ! \ number of trial types (CS, US and CS+US).

\ 108 #t/blk ! \ number of trials per block.

\ 1 #blks ! \ number of blocks.

\ 108 #trls ! \ number of trials.

\ 7 bada/d ! \ a/d criterion for bad trials (7 = 0.7 mm).

\ 100 badunits ! \ unit criterion for bad trials.

\ 25 badtime ! \ bad trial if movement in first 25 ms of CS period.

\ printing off \ off = print to monitor only.
\ screen 3

\ ranges documentation.

\ this information or information like it is found on screens 10 and 11 of the summary.scr file.

\ it is duplicated here for documentation purposes.

\

\ variable #periods \ number of epochs in preCS period.



\

\ : 2nd ( -- n)

\ \ n is the number of bins in half of the preCS period.

\ 2 #periods !

\ toneon 2 / ;

\

\ : 3rd ( -- n)



\ \ n is the number of bins in a third of the preCS period.

\ 3 #periods !

\ toneon 3 / ;

\

\ : 4th ( -- n)



\ \ n is the number of bins in a fourth of the preCS period.

\ 4 #periods !

\ toneon 4 / ;

\

\ create ranges 0 , 0 , ( will hold #ranges = ranges @ )



\ \ the following values are ranges in terms of bins.

\ \ using calculations and definitions for 2nd, 3rd and 4th helps make certain the differences for each

\ \ range are the same.

\ here ( n)

\ toneon dup 3rd - swap , , \ could be any third of preCS period.

\ here, PCS epoch number 3 out of 3 is

\ used for mean and standard deviation.

\

\ shkon 3rd - 3rd - dup 3rd - swap , , \ could be any nonoverlapping epoch in



\ the trial.

\ here, CS epoch number 1 out of 3.

\ shkon 3rd - dup 3rd - swap , , \ ditto; here CS epoch number 2 of 3.

\ shkon dup 3rd - swap , , \ ditto; here CS epoch number 3 of 3.

\ shkon dup 3rd + , , \ ditto; here US epoch number 1 of 3.

\ shkon 3rd + dup 3rd + , , \ ditto; here US epoch number 2 of 3.

\ shkon 3rd + 3rd + dup 3rd + , , \ ditto; here US epoch number 3 of 3.

\ ( n) here swap - d#bytes u/ ranges ! \ store numbe of ranges; here, 7.


\ screen 4

\ display ranges.


variable range#
: 'range ( n -- adr)

\ given index number, return address of table corresponding to that range number.

d#bytes * ranges + ;
: .ranges ( --)

\ print table of range values.

1 ( fr) ranges @ ( #) bounds

?do


." No. " i 0 2 d.r i 'range 2@ 1- swap

bin @ 1000 / * 0 5 d.r ." -"

bin @ 1000 / * 0 5 d.r ." msec inclusive"

i 'range 2@ 1- swap

." ( bins " 0 3 d.r ." - " 0 3 d.r ." )" cr

loop ;
\ screen 5

\ printing controls.
variable amount
: long ( --)

\ print long form of data output.

amount on ;
: short ( --)

\ print short form of data output.

amount off ;
\ Epson printer ...

\ : +CONDENSED ( --) 15 EMIT ;

\ : -CONDENSED ( --) 18 EMIT ;
\ HP Laserjet printer ...

: +CONDENSED ( --)

\ use condensed printing.

esc# emit " (s16.66h8.5v0T" type ;


: -CONDENSED ( --)

\ use normal printing.

esc# emit " (s12h10v3T" type ;
\ screen 6

\ trials array


variable data# \ first data, second, etc.; 0 to n-1.

\ used to pass index.


: trials ( row col -- dadr.l)

\ given row and column, return long address for double number value.

\ use: 1,1 to row,col = dn.

\ REM: 0 <= data# @ <= #a/d @ #units @ +.

1- f#bytes * ( col')

swap 1- data# @ #trls @ * + ranges @ * f#bytes * ( row')

+ ( col' + row') 12288 ( =$3000, segment 3) ;
\ identities ...
: f@l ( offset segment -- fn)

\ equivalent long floating point fetch.

2@l ;
: f!l ( offset seqment fn --)

\ equivalent long floating point store.

2!l ;
\ screen 7

\ trial collection


: calcmeas ( --)

\ calculate measures (preCS/CS/US amplitude/area/latency) for trial.

\ borrowed from the Summary program, this is needed to calculate bad trials.

trl# @ ( i)

clearpointers

dup ( i i) block allocate

nmrv (nmrv) max#a/d 2* cmove

unitv (unitv) max#units 2* cmove

measure

( i) trial>aux ;


\ screen 8

\ calculate sum of x for all ranges and store in auxilliary memory for a single trial.


: into ( -- n)

\ given an index (data#), get address of trial data.

data# @ pts * trl# @ block + ;
: collect ( --)

\ sum ranges within trial then store in AUX.

\ this routine operates to sum all ranges (using range table) for a single trial.

\ assumes trl# (1 to n) is set.

\ note: data# is used to pass index parameter here and in trials.

0 ( fr) #a/d @ #units @ + ( #) bounds

?do

i data# ! 1 ( fr) ranges @ ( #) bounds



?do

0 0 ( Ex dummy)

i 'range 2@ into + swap into +

?do


i c@ 0 d+

loop


( dEx) float ( fEx) \ convert double number to floating point number for storage.

trl# @ ( row) i ( col) trials f!l

nuf? ?leave

loop


loop

calcmeas ;


\ screen 9

\ process every trial.


: bytrials ( --)

\ read every trial and do calculations.

0 block 64 + 0 64 >a ( move header to aux)

ram erase

dark

." Initial processing of data"



cr ." Processing trial "

1 #trls @ bounds

?do

i trl# !



17 1 at i 0 3 d.r \ print trial number

collect


nuf? ?leave

loop ;
variable cell

9 cell !
: .rw ( trial1 trial2 --)

\ print raw trial data by range.

?do

i 0 3 d.r space i 1- ttarr + c@ emit



3 spaces

1 ( fr) ranges @ ( #) bounds

?do

j i trials f@l 0 cell @ f.r



loop

cr


nuf? ?leave

loop ;
\ screen 10

\ continued
: .raw ( --)

\ print raw trial data for all trials.

0 ( fr) #a/d @ #units @ + ( #) bounds

?do


i data# !

cr ." Data number " i 1+ 0 3 d.r

cr cr

1 ( fr) #trls @ ( #) bounds .rw



loop

cr ;
\ screen 11

\ arrays and fvariables
: array ( range# @ 1- -- adr)

\ use RAM as temporary array space.

f#bytes * ram drop + ;
: room ( --)

\ check to make sure there is enough room in RAM to analyze the amount of data requested.

#trls @ ranges @ * #a/d @ #units @ + * ( room for trials)

65535 u< not abort" Not enough room in AUXILLIARY"

ranges @ f#bytes * 1 ( # temp buffers, see array) *

ram nip u< not

abort" Not enough room in RAM" ;
\ floating point variables for z-score calculations ...

\ "general" refers to epoch (usually preCS) used to calculate mean and standard error used for

\ z-scores.
fvariable fn \ general n (number) of periods.

fvariable fEx \ general Ex (sum of x) of periods.

fvariable fEx2 \ general Ex2 (sum of squared x's) of periods.

fvariable fEx2block \ Ex2 (sum of squared x's) of block.

fvariable fmean \ general mean of periods.

fvariable fdev \ general standard deviation of periods.


\ screen 12

\ initialize


: initialize ( --)

\ zero all cumulators before calculations.

0. float fn f!

0. float fEx f!

0. float fEx2 f!

0. float fEx2block f!

0 array ( fr) ranges @ 1+ f#bytes * 1+ ( #) erase ;
: f+! ( fvar adr --)

\ floating point equivalent to +!

dup >r f@ f+ r> f! ;
: .flt ( adr n --)

\ print floating point number.

>r f@ r> cell @ f.r ;
: .grand ( --)

\ print grand statistics.

." Data #" data# @ 1+ 0 3 d.r ." over all trial types"

cr ." Period Grand N = " fn 0 .flt

cr ." Period Grand Ex = " fEx 0 .flt

cr ." Period Grand Ex2 = " fEx2 0 .flt

cr ." Period Grand Mean = " fmean 2 .flt

cr ." Bin Grand Mean = " fmean f@ toneon #periods @ /

0 float f/ 2 cell @ f.r

cr ." Period Grand Dev = " fdev f@ f0=

if

7 spaces ." ??"



else

fdev 2 .flt

then

cr ;
\ screen 13



\ grand statistics: mean, deviation
: gmean ( --)

\ grand mean.

fEx f@ fn f@ f/ fmean f! ;
: gdeviation ( --)

\ grand standard deviation.

\ population sigma = [ E(x - mean)**2 / N ] ** 1/2

\ sample ( N < 30) sigma =

\ [ [ Ex**2 - [ (Ex)**2 / N ] ] / ( N - 1) ] ** 1/2

fEx2 f@ fEx f@ fsqr fn f@ f/ f- ( numerator)

fn f@ fdup 30. float f< fn f@ 2. float f- f0< not and

if 1. float f- then ( denominator)

f/ fsqrt fdev f! ;
\ screen 14

\ pcs calculations ...


: +pcs ( --)

\ add in trial from AUX.

1. float ( fvalue) fn ( fvariable) f+!

trl# @ 1 trials f@l fdup fEx f+!

fsqr fEx2 f+! ;
: pcs ( fr # --)

\ preCS calculations.

\ must set data# for trials.

initialize

bounds

?do


i 1- bdtarr + c@ 0= ( true if good trial)

if i trl# ! +pcs then

loop

gmean


gdeviation ;
\ screen 15

\ print trials ...


: .float ( fvalue n --)

\ print floating point number.

cell @ f.r ;
: .trl ( trial1 trial2 --)

\ print raw trial data.

?do

i 1- bdtarr + c@



if

ascii - emit

else

i 1- crtarr + c@



if

ascii + emit

else

space


then

then


i 0 3 d.r space i 1- ttarr + c@ emit

3 spaces

1 ( fr) ranges @ ( #) bounds

?do


j i trials f@l i 1 =

if


fmean f@

else


j 1 trials f@l

then


f- fdev f@ f/ 2 .float

loop


cr

nuf? ?leave

loop ;
\ screen 16

\ continued


: .trials ( --)

\ print all trials.

1 ( fr) #trls @ ( #) bounds .trl ;
\ screen 17

\ trial words


: +trial ( --)

\ add in trial from AUX.

1. float ( fvalue) fn ( fvariable) f+!

1 ( fr) ranges @ ( #) bounds

?do

i range# !



trl# @ range# @ trials f@l range# @ 1 =

if


fdup fsqr fEx2block f+!

then


range# @ array f+!

loop ;
: *trials ( fr # --)

\ for a range of trials add in good trials.

\ must set data# and trltype.

bounds

?do


i trl# !

i 1- bdtarr + c@ 0= ( true if good trial)

trl# @ 1- ttarr + c@ ascii 1 - trltype @ = ( correct?)

and


if +trial then

loop ;


\ screen 18

\ calculater percent


: calc% ( fr to --)

\ calculate percent.

\ use after figurebadtrials & figurecrtrials.

bounds 0 ( sum) 0 ( n) 2swap

?do

ttarr i 1- + c@ ascii 1 - trltype @ =



if

bdtarr i 1- + c@ 0=

if

1+ crtarr i 1- + c@



if

swap 1+ swap

then

then


then

loop


2dup

>r 1000 um* r> rm/ .tenths ." %"

space ascii ( emit swap u. ascii / emit u. ascii ) emit ;
: sescalc% ( --)

\ calculate session percentages.

0 types @ bounds

?do


i trltype !

." CRs for trial type " trltype @ 1+ u. ." :"

1 ( fr) #trls @ ( #) calc% cr

loop ;
\ screen 19

\ continued
: .. ( i --)

\ print N, Ex; calc & print Mean & Z.

0 3 d.r

." N =" fn f@ 0 ( decimals) 4 ( field) f.r cr

1 ( fr) ranges @ ( #) bounds ( dn)

amount @

if

3 spaces



." Ex = " 2dup

?do


i array f@ 0 .float

loop


cr

3 spaces

." Mean = " 2dup

?do


i array f@ fn f@ f/ 2 .float

loop


cr

then ( dn)

3 spaces

." Z = "

?do

i array f@ fn f@ f/ i 1 =



if

fmean f@

else

1 array f@ fn f@ f/



then

f- fdev f@ f/ 2 .float

loop

cr ;
\ screen 20



\ messages
: .warning ( --)

\ print warning.

data# @ #a/d @ u<

if


." WARNING: The program believes that this is NM data."

cr


." Because of the way a/d data is stored, if this is a/d data then multiply z-scores by -1 to

change the sign"

cr

then ;
: .comment ( --)



\ print comment.

0 info 64 a> info 64 -trailing type

cr ;
: .headings ( --)

\ print headings.

." Data #"

data# @ 1+ 0 3 d.r

cr

." Trial Type #" trltype @ 1+ 0 3 d.r



cr ;
: straiten ( str cell --)

\ straighten (right justify) field for printing.

2dup swap - 0<

if


swap over min swap

then


over - spaces type ;
: .fields ( --)

\ print fields.

." Blk stats " 1 ( fr) ranges @ ( #) bounds

?do


" No." cell @ 2- straiten i 0 2 d.r

loop


cr ;
: likepage ( --)

\ on monitor, print a line of periods to indicate page break.

cr 70 0

do


ascii . emit

loop


cr ;
: page? ( --)

\ at page break, act according to printer or monitor.

printing @

if


page

else


likepage

then ;
\ screen 21

\ z-criteria
variable zcrit 165 zcrit ! \ integer z-critical; user friendly
fvariable fcrit \ floating point of zcrit divided by 100.
: zcr ( --) 2 ( fr)

\ determine CR by using z-score.

ttarr trl# @ 1- + c@ ascii 1 =

if


ranges @ 1- ( CS)

else


#periods @ ( paired)

then ( #)

bounds

?do


fdev f@ f0= not

if


fcrit f@

trl# @ i trials f@l

trl# @ 1 trials f@l ( instead of fmean f@)

f- fdev f@ f/ ( z)

data# @ #a/d @ u< ( true if a/d) if fnegate then f<=

if


1 crtarr trl# @ 1- + c!

then


then

loop ;
\ screen 22

\ continued
' nm/unflag is badflag \ false, nmflag, unflag, nm/unflag
: figurebadtrials ( --)

\ figure out which trials are bad.

\ do this routine before using pcs routine.

bdtarr #trls @ erase

1 ( fr) #trls @ ( #) bounds

?do


i trl# ! ttarr i 1- + c@ ascii 1 - ( converts ascii)

trltype ! ( used by walk)

movedata

badflag


if

1 bdtarr trl# @ 1- + c!

then

loop ;
: figurecrtrials ( fr # --)



\ figure out which trials have a conditioned response.

\ do this routine after pcs routine & before .trials routine.

crtarr #trls @ erase

bounds


?do

i trl# ! ttarr i 1- + c@ ascii 1 - ( converts ascii)

trltype ! ( used by walk)

movedata

badflag not

if zcr then

loop ;
\ screen 23

\ run
: .rn ( --)

\ print run.

1 ( fr) #blks @ ( #) bounds

?do

initialize



i 1- #t/blk @ * 1+ ( fr) #t/blk @ ( #) *trials

i .. space

i 1- #t/blk @ * 1+ ( fr) #t/blk @ ( #) calc%

cr


nuf? ?leave

loop ;
\ screen 24

\ continued
: .zcrit ( --)

\ print z-score criteria.

." Z-score critical level set at " fcrit f@

data# @ #a/d @ u<

if

fnegate f. ." and below"



else

f. ." and above"

then

cr ;
\ ' noop is .criteria



\ .nmlevel, .unlevel

' .zcrit is .criteria


\ screen 25

\ load these routines if need new .bad and .good for printing.


\ the following limits length of line for printing trials.
need items \| ( beginning of conditional compiling ...)
var items 25 items !
: ret ( n i -- n')

u. space 1+ dup items @ mod 0= if cr then ;


: .BAD ( --)

\ print bad trials.

CR

." BAD TRIALS: "



0

1 ( fr) #TRLS @ ( #) BOUNDS

DO

BDTARR I 1- + C@ 0<>



IF

I ret


THEN

LOOP


drop

CR ;
: .GOOD ( --)

\ print good trials.

CR


." CR TRIALS: "

0

1 ( fr) #TRLS @ ( #) BOUNDS



DO

CRTARR I 1- + C@ 0<>

IF

I ret


THEN

LOOP


drop

CR CR ;
| ( ... end of conditional compiling)


: ... ( i --)

\ new print out word for block z-scores.

\ print N, Ex; calc & print Mean & Z.

." Block =" 1+ 0 3 d.r

." N =" fn f@ 0 ( decimals) 4 ( field) f.r

cr


1 ( fr) ranges @ ( #) bounds ( dn)

amount @

if

3 spaces



." Ex = " 2dup

?do


i array f@ 0 .float

loop


cr

3 spaces

." Mean = " 2dup

?do


i array f@ fn f@ f/ 2 .float

loop


cr

then ( dn)

3 spaces

." Z = "

?do

i array f@ fn f@ f/



1 array f@ fn f@ f/ f- fdev f@ f/ 2 .float

loop


cr ;
\ screen 26

\ runblocks


: runblocks ( --)

\ print block z scores.

\ debugging notes:

\ room debug @ not if bytrials then

\ zcrit @ 0 float 100. float f/ fcrit f!

\ zcrit intgr to float.

\ figurebadtrials

\ printing @ if printer on +condensed then

0 ( fr) #a/d @ #units @ + ( #) bounds

?do


i data# !

0 ( fr) types @ ( #) bounds

?do

i trltype !



.comment

cr .headings cr

0 ( fr) #blks @ ( #) bounds

?do


#blks @ #trls @ <>

if


initialize

i #t/blk @ * 1+ ( fr) #t/blk @ ( #) *trials

1 array f@ fEx f! fEx2block f@ fEx2 f!

gmean


gdeviation

\ .grand ( debug)

i ...

else


." Warning: Use RUN instead for this analysis"

then


nuf? ?leave

loop


page?

loop


key? if key esc# = if abort then then

loop ;
\ printing @ if -condensed printer off then ;


\ screen 27

\ continued


: run ( --)

\ this is the main execution word for z-score analysis of normal trials.

room

debug @ not if bytrials then



zcrit @ 0 float 100. float f/ fcrit f!

\ zcrit intgr to float.

figurebadtrials

printing @

if

printer on +condensed



then

0 ( fr) #a/d @ #units @ + ( #) bounds

?do

i data# !



.comment

cr


.ranges

cr


1 ( fr) #trls @ ( #) pcs .grand

cr


1 ( fr) #trls @ ( #) figurecrtrials

key? if key esc# = if abort then then

. warning

.bad


.good

criterion

sescalc%

cr


#blks @ #trls @ <>

if


0 ( fr) types @ ( #) bounds

?do


i trltype !

.headings cr

.fields cr

.rn cr


loop

page?


else

.fields cr

.trials

page?


then

loop


runblocks

printing @

if

printer off



then ;
\ screen 28

\ continued


: blkrun ( --)

\ execution word for normal block analysis for z-scores.

\ analyze paired in blocks only.

room


bytrials

zcrit @ 0 float 100. float f/ fcrit f!

figurebadtrials

printing @

if

printer on



+condensed

then


#a/d @ #units @ + 0

?do


i data# !

0 ( fr) types @ ( #) bounds

?do

i trltype !



i 1 = ( variability only in paired trials in block)

if


.comment cr

.headings cr

0 #blks @ bounds

?do


#blks @ #trls @ <>

if


initialize

i #t/blk @ * 1+ ( fr) #t/blk @ ( #) *trials

1 array f@ fEx f! fEx2block f@ fEx2 f!

gmean


gdeviation

i ...


else

." Use RUN for this analysis"

then

nuf? ?leave



loop

page?


then

loop


key? if key esc# = if abort then then

loop


printing @

if


printer off

then ;
\ screen 29

\ documentation instructions (screen 11 of summary.scr)

\

\ Instructions:



\ Make certain the differences for each range are the same.

\

\ \ including z.scr \ original Thompson et al. 1976 z-score analysis



\

\ including z.blk \ original and analysis for zscores by block

\ short

\

\ the following are typical instructions for using this analysis ...



\

\ Type the following ...

\ flush

\ printing on

\ long (all statistics in print out; rarely used, mostly for debugging)

\ or short (minimal statistics in print out; default and usual choice)

\ 1 #a/d ! (for example)

\ 1 #units ! (for example)

\ using filename.sc (i.e., open a data file)

\ run (Thompson z-score analysis)

\ or blkrun (block z-score analysis, e.g., drug or cooling)

\

\ these commands can be repeated as often as desired without reloading program.



\


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azrefs.org 2016
rəhbərliyinə müraciət

    Ana səhifə