Journal of Immunological Methods, 102 (1987) 251-258 Elsevier
251
JIM 04455
Computer-assisted collection and analysis of enzyme-linked immunosorbent assay data M i c h a e l L a Belle Lawrence Berkeley Laboratory, Donner Laboratory, University of California, 1 Cyclotron Road, 1-213, Berkeley, CA 94720, U.S.A. (Received 23 February 1987, accepted 21 April 1987)
Computer programs are presented for automating the collection, processing, and analysis of enzyme-linked immunosorbent assay (ELISA) data. The programs are written to run on an Apple Macintosh computer (equipped with at least 512 kilobytes of r a n d o m access memory, a single disk drive, and an Apple Image-writer dot matrix printer) interfaced with a Bio-Rad EIA reader. The primary program is written in Pascal with associated data analysis performed by a p r o g r a m m a b l e electronic spreadsheet. Key words: ELISA; Computer program; Hybridoma screening
Introduction Due to their sensitivity and specificity in detecting the presence of a particular antigen, enzyme-linked immunosorbent assays (Engvall and Perlmann, 1971; Van Weeman and Schuurs, 1971) have become a widely used tool in a number of fields. Because of this, a number of commercial photometers (called ELISA or EIA readers) have become available for use in reading optical densities (ODs) in 96-well microtiter plates and a number of these ELISA readers are capable of being interfaced to the latest generation of powerful microcomputers to allow more efficient analysis of ELISA data (Richardson et al., 1983; Franco et al., 1984). While most of the ELISA r e a d e r / c o m puter combinations have programs available which are able to make computations based on the measurement of O D at a single time point (such as the determination of an unknown from a dilution series), only a few of these commercial programs Correspondence to: M. La Belle, Lawrence Berkeley Laboratory, Donner Laboratory, University of California, 1 Cyclotron Road, 1-213, Berkeley, CA 94720, U.S.A.
take advantage of the fact that current ELISA readers are fast enough to make multiple measurements of the O D during color development in each of the microtiter plates' 96 wells. Measurement of the increase in O D with time allows the calculation and use of the reaction rate for each well during the linear portion of O D development instead of using a single endpoint determination. By using the reaction rate, it is possible to detect a greater range in response and since the rate data are determined from the linear portion of the reaction, the data should more accurately reflect any differences in response. Of the few commercial programs that do allow the determination of reaction rate, all are quite expensive, some require the additional purchase of still other programs (runtime systems) in order to operate, and all are available only for IBM or IBM-compatible microcomputers or require that the ELISA reader be interfaced with a high-end minicomputer. In addition, because of differences in the manner in which each manufacturer's ELISA reader transmits data, the programs are very machine-specific, i.e., programs which work with a Dynatech ELISA reader will not work with a different manufac-
252 turer's ELISA reader. Currently, there are no commercially available programs for the Bio-Rad ELISA reader which are capable of determining reaction rate. The programs developed and reported here allow the user to rapidly collect O D measurements and determine the reaction rate in the linear portion of color development using an Apple Macintosh computer interfaced to a BioRad ELISA reader.
Materials and methods
System configuration The computer used is an Apple Macintosh 512 Enhanced equipped with an 800 kilobyte (K) internal floppy drive, a mouse (a screen-oriented pointing device), an external Apple 20 megabyte hard disk, and an Apple Imagewriter II printer. Note that the hard disk is not a necessity, although a second disk drive is recommended. The computer was connected, using a Bio-Rad RS232C interface, through the Macintosh m o d e m port (serial port A) to a Bio-Rad Model 2550 EIA reader. The program, called 'Reader', was written in Pascal and was compiled using version 2.0 of the T M L Systems Pascal compiler and linker. The program was developed on a Macintosh computer equipped with the new 128 K R O M (read only memory) and under versions 3.2 and 5.3 of the system file and finder, respectively, and should run on Macintosh's equipped with the older 64 K ROM. The ELISA spreadsheet template and macros were written with and for Microsoft's Excel spreadsheet (version 1.0). (Researchers wishing copies of these programs and templates should send a blank disk (400 K or 800 K) to the author.) The Excel spreadsheet program was chosen over other spreadsheet programs because of its capability to be programmed, its built-in graphics capability, and its low cost.
Data transmission For purposes of data transmission, the Bio-Rad EIA reader must be started manually and the user must keep track of the time from the start of the assay, since the EIA reader does not allow the computer to signal when to begin data collection or transmission, or to wait if the computer is
unable to accept the transmission. Once the EIA reader has finished reading the optical densities from the 96-well microtiter plate, the ODs from each well in column 1 (which the Bio-Rad EIA reader uses for blanking) are subtracted from the sample wells in the same row, the corrected data is nines complemented, and the high bit of each byte set to one. The EIA reader's operating mode is then transmitted followed by the O D data. According to the Bio-Rad instruction manual, data is transmitted from the EIA reader at 600 baud as serial 8-bit ASCII (American Standard Code for Information Interchange) code in an asynchronous mode with 1 stop bit, 1 start bit, and no parity. However, the only way the program Reader was able to read the data was if the program set the Macintosh to read 2 stop bits and no start bit, suggesting an error in the manual. In addition, since the EIA reader sets the high bit (bit 7) of each byte transmitted to 1, thus adding 128 to the standard ASCII code, the transmitted data is definitely non-ASCII. Any programs (such as terminal emulation programs) which expect to receive
OPENS R'AL ORTI
0SELECT,ON ?
z, :ND ~ ,GRA f \
j, CONVERTTO REALNUMBERS
I CLOSESERIAL PORT P'
AY~ [ p
I CONVERT R~ALNUMBERS TOTEXT 1 J, /SAVEMOOE~OOOATA/
Fig. 1. Flow chart for the program Reader. The symbols used in the flowchart are conventional programming symbols.
253
ASCII data will usually be unable to accept a n d / o r interpret these altered bytes and, from experience, may cause the computer to 'crash'. It should also be noted that no error detection protocols (such as XModem) are used for data transfer, nor does the EIA reader transmit the well coordinates for each OD.
Results Function of the Pascal program 'Reader' The flow chart in Fig. 1 summarizes the operation of the program Reader. The program will first open the Macintosh's serial port to receive
A rate
r
data, then open a generic window on the computer screen and present the user with a menu consisting of four choices: receive data; display data; print data; and end program. To read data in from the EIA reader, 'receive data' should be selected and then the EIA reader, which should be in absorbance mode, started. Unlike other EIA readers, the Bio-Rad EIA reader does not transmit any formatting information, such as decimal points for the ODs or the well coordinates associated with the data. All of this type of information must be (and is) supplied by the program Reader. When all the data is received by the program Reader, it resets the high bit of each byte to zero and then converts each data byte into its corresponding
= 3 4 s s T 8 9 lO ~, 1= 9a.6 18~.2 las.o I aa.9 1100.61 67.0 1 50.5 172.2 137.6 153.5 171.2 I 0.99 10.95 I 0.94 I 0.95 I 0.98 I 0.98 I O.98 I 0.92 I 0.94 I 0.97 I 0.98 I
B rate I 88.8 180.S 148.1 I 49.0 191.5 16,6.0 I 3S.4 I S~.S 146.2 IS8.0 180.~ I r I 1.00 10.9410.991 C
ratel 60.7 r I 0.99
D ratel r E
ratel
r
F
1.00 1 0.98 1 0,97 I 0.95 I 0.78 10.98 I 0.97 10.95 I
72.0 I 0.98 70.9 I 0.98
ratel 72.6 r I 0.96
G ratel 70.0 r I 0.97
" ratetT02r 09, Fig. 2. An example of the 2 × 11 array of rate calculations in an ELISA spreadsheet. The array corresponds to wells 2 through 12 on the microtiter plate. The alphanumeric labels across the top and left side of the rate array correspond to the column and row labelling on the rnicrotiter plate. The first column, which the EIA reader uses for blanking purposes, is excluded from the calculations. The cells in the rows labelled 'rate' contain the rate of OD development ( × 1000) for the corresponding well on the ELISA plate, while each cell in the rows labelled ' r ' contain the correlation coefficient for the best fit line used to calculate the rate in the cell immediately above. Each cell in the array contains instructions which call the appropriate macro and pass data to the macro.
254 A1
LOADER
A2 =OPEN("ELISATEMPLATE")
A37
A3 =CALCULATION(3,FALSE)
A38 =SET.NAME("Ioopnum",0)
A4
A39 =SET.NAME("loopnum",loopnum+l)
Get the number of time pts. and initialize the loop pointer
A5 =SET.NAME("NumReadings",INPUT("Enterthe number of readings (6 maximum):",1))
Now put the time point data into the spreadsheet
A40 =ACTIVATE("DataLoader I1") A41 =SELECT(INDEX(B9:B14,1oopnum)) A42 =COPY()
A6 =lF(OR(NumReadings6),GOTO(A5))
A43 =ACTIVATE("ELISATEMPLATE")
A7
A44 =lF(Ioopnum>2,SELECT("R[13]C"),lF(Ioopnum=1,
Ask the user for the time points for each reading
A8 =SET.NAME("Ioopnurn",0)
SELECT("R2CT), SELECT("R17C7")))
A9 =SET.NAME('loopnum",loopnum+l)
A45 =PASTE.SPECIAL(3,1)
A10 =SET.VALUE(INDEX(B9:B14,1oopnum),INPUT
A46 =lF(Ioopnum
(INDEX(B17:B22,1oopnum),l))
A47 =OPEN("ELISAMacro2")
A11 =lF(Ioopnum
A48 =ACTIVATE("ELISATEMPLATE")
A12 Initialize pointer for inputting readings stored on disk
A49 =RETURN()
A13 =SET.NAME("pointer',0)
7it/es for each OD reading saved as a data sheet
A14 Start the loop to get the readings from disk
B1
='Reading 1"
A15 =SET.NAME("pointer",pointer+l)
B2
="Reading 2"
A16 =OPEN(INDEX(B1 :B6,pointer))
B3
="Reading 3"
A17 =lF(pointer
B4
="Reading 4"
A18 Now copy the ODs into the rate template
B5
="Reading5"
A19 =SET.NAME("pointer",0)
B6
="Reading6"
A20 =SET.NAME("pointer",pointer+l)
B16
A21 =ACTIVATE(INDEX(B1:B6,pointer))
B17 ="Enter First Time Pt (min):"
A22 =SELECT("R3C1:R10(312")
B18 ="Enter Second Time Pt (rain):"
A23 =COPY()
B19 ="EnterThird Time Pt (rain):"
A24 =ACTIVATE('ELISA TEMPLATE")
B20 ="Enter Fourth Time Pt (min):"
A25 =lF(pointer>l ,GOTO(A28))
B21 ="Enter Fifth Time Pt (rain):"
A26 =SELECT("R6C2")
B22 ="Enter Sixth Time Pt (rain):"
Requests for 7~mePt Data
A27 =GOTO(A29) A28 =SELECT("R[13]C') A29 =PASTE.SPECIAL(3,1 ) A30 =lF(pointer
255
A1
ELISA_Rate Set the type of result returned to be a number
A2
=RESULT(I)
A3 A4 A5 A6 A7 A8
=ARGUMENT(,1,B2) =ARGUMENT(,1,B3) =ARGUMENT(,1,B4) =ARGUMENT(,1,B5) =ARGUMENT(,1,B6) =ARGUMENT(,1,B7)
Place the ODs passed to the macro in cells B2-B7
Place the relative column number of the cell which
A36 =SET.VALUE(C32,LINEST(B11:INDEX(B11:B16,C35), C11 :INDEX(C11:C16,C35))) A37 Go to Corr. coef. routine and calculate correlation coefficient, then return and zero work areas A38 =C_,,-OTO(C18) A39 =SET.VALUE(B2:B7,0) A40 =SET.VALUE(B11:B16,0) A41 =SET.VALUE(C11:C16,0) Return the rate of color developement as OD units/min x 1000
A42 =RETURN(C32*1000) Return an error message if too many assay points or
called the macro in celiA47
A9 =ARGUMENT(,1,A47) A10 =IF(A47=l,SET.VALUE(C38:C49,0))
no assays were done A43 -RETURN('Assays =0 or >6")
/f the calling cell is the start of a new row, then zero
A11 A12 A13 A14 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 A32 A33 A34
the correlation coefficient area on the macro sheet
C18
=SET.VALUE(C32,0) Initialize the counters =SET.NAME("counter',0) =SET.NAME('POinterl",I) =SET.NAME("pointer2",l) Start of the loop which sets up the pointers to the various tables which contain the ODs and Times =SET.NAME('counter",counter+l) =SET.NAME("OD_ref",DEREF(INDEX(B2:B7,pointerl))) =SET.NAME("Time_ref',DEREF(INDEX(C2:C7,pointerl))) =SET.NAME('Work_OD',INDEX(B11 :B16,pointer2)) =SET.NAME('Work_Time",INDEX(C1l:C16,pointer2)) Checkthat OD's are within acceptable parameters & set up the work tables with only the acceptable values =IF(OR(OD_ref<0.05,OD_ref>1.5),GOTO(A28)) =SET.VALUE(Work_OD,OD_ref) =SET.VALUE(Work_Time,Time_ref) =SET.NAME('pointer2",pointer2+l ) =SET.NAME("pointerl",pointerl+l) =lF(counter
C19 =SET.NAME('indx",DEREF(B30))
Correlation Coefficient Subroutine
C20 =SET.NAME("OD range',B11: INDEX(B11:B16,indx)) C21 =SET.NAME('13me_range',C11: INDEX(C11:C16,indx)) C22 ==SET.VALUE(B20,AVERAGE(OD_range)) C23 =SET.VALUE(B23,SUM((OD rangeTREND(OD_range,'Time_range))^2)) C24 =SET.VALUE(B26,SUM((OD range-B20)^2)) C25 =SET.VALUE(INDEX(C38:C49,A47),SQRT(t(B23/B26))) C26 =GOTO(A40) Correlation
A50 Routine to return calculated Corr. Coef. to a calling cell in template spreadsheet. A51 =ARGUMENT("Callnumber",1) A52 =IF(OR(cell numberl 1), GOTO(A54)) A53 =RETURN(INDEX(C38:C49,ceU_number)) A54 =RETURN('Bad cell#')
A35 =GOTO(A40) Fig. 4. ELISA rate function macro (contained in cells A1-A43 and C18-C26) which calculates the linear regression and correlation coefficient for the data passed to it from a cell on the ELISA template spreadsheet. The shorter macro in cells A50 through A54 returns the correlation coefficient values, calculated by the ELISA rate macro, to the ELISA template spreadsheet, The labels on the right side of the ' = ' sign indicate the column and row each program line is in. Alphanumeric references in the program lines refer to other cells on the macro sheet. The macro returns the rate of color development as O D / m i n × 1000 (cell A42). This can be changed to O D / h by replacing the value 1000 with 60. Cell A23 contains the values which are used to determine if the OD falls within the linear range. By changing these values, the user can set the exclusion limits of the ODs used in calculating the rate.
256 00 w . Time
TABLE I
14
SUMMARY OF FUNCTIONS FOR THE PROGRAMS U S E D TO C O L L E C T A N D A N A L Y Z E O D D A T A
10
The program titled 'Reader' was written in Pascal, while the programs 'Loader', 'ELISA rate', 'Correlation', and ' C h a r t Maker' are written as macros for the programmable spreadsheet Excel.
0.8 06 04 02 0
/
I 8
I
10
112
14
116
118
210
I
22
24
Program
Function
Reader
Inputs data from EIA reader. Strips out EIA reader modifications of data. Converts the data to real numbers. Saves data to disk. Formats the data for display, printing, or saving to disk. Displays data on screen. Prints data,
Loader
Loads the template spreadsheet into the spreadsheet program. Inputs the time point values from the user. Loads the O D data, saved by the program reader, and pastes it and the time point values into the appropriate positions in the template spreadsheet.
ELISA Rate
Checks that input OD values fall within acceptable levels. Calculates rate of OD development by linear regression. Calculates the correlation coefficient of the best fit line and stores the value.
Correlation
Retrieves the stored correlation coefficients and places them into the appropriate cell in the spreadsheet template.
Chart Maker
Creates a scatter chart of the OD data from any well.
Fig. 5. A scatter chart constructed from a single well's O D and time point data in an ELISA spreadsheet by the chart macro given in Fig. 6. The macro cannot label the x- or y-axis, due to limitations of the macro functions available in Excel. However, axes can be labelled using c o m m a n d s entered by the keyboard and mouse.
integer. The linear array of integers is then uncomplemented and converted into an 8 x 12 array of real numbers corresponding to the ODs in each well of the microtiter plate. The program then converts the numerical data into a linear array of text with embedded formatting information, asks the user for a file name to save the data under, and then the information on the EIA reader's operating mode and the text data is saved to disk. When the data is saved to disk, the program sets the data file's creator type for the spreadsheet program Excel, allowing the data file to be read directly into an Excel spreadsheet, and the file type is set to text, which allows the data file to be read by any program capable of reading a text file. The program then returns to the main menu. At this point, the user can display the data on screen, print the data out as an 8 x 12 array labelled by row and column, or input another O D reading from the EIA reader.
Function of the spreadsheet programs To analyze the data collected and stored by the program Reader, the Excell macro ' L o a d e r ' asks the user for both the total number of time points and their values, then loads both the ELISA template spreadsheet and the OD data files, and then copies the O D values and their associated time points into the appropriate locations in the ELISA template spreadsheet. A spreadsheet in Excell consists of a two-dimensional array of cells, each cell capable of containing text, numerical data, or a
call to a spreadsheet program (termed a ' m a c r o ' ) plus information to be passed to the macro. Macros are created and stored on macro sheets, which are similar to a normal Excel spreadsheet with each cell of a macro sheet containing a program c o m m a n d rather than a text or numerical value. Each cell on a macro sheet or a spreadsheet (and the information it contains) is referenced by its row letter and column number. The data section of the ELISA template spreadsheet consists of six 8 x 12 arrays of data cells. Each data array holds the O D readings from a single time point reading of the microtiter plate, with each cell of these data arrays holding the O D for its corresponding well
257
D1
ChartMaker Define the spreadsheet cell selected by the user as the origin.
D2 =SET.NAME('Origin',SELECTION0) Select an area on the template spreadsheet to gather all the OD and time point data, clear it of all the old numbers, set the numerical format for the area and then return to the origin.
D3 =SELECT(!$G$134:$G$139) D4 D5 D6 D7
=CLEAR(I) =FORMAT.NUMBER("0.000") =ALIGNMENT(3) =SELECT(Origin) Find the row number of the cell selected by the user on the template spreadsheet and assign that number to the variable rownum.
D8 =SET.NAME("rownum",ROW(Origin)) D9 =SET.VALUE(D11,0) D10 =SET.NAME('row_pointer",103) Dll =Dl1+1
D22 =IF(D18=C29,GOTO(D27)) D23 =SELECT(ceil) D24 =SELECT(,"R[13]C") D25 =SET.NAME("celI",SELECTION0) D26 =IF(D18<6,GOTO(D18)) D27 Set upthe chart D28 =D18+1 D29 =NEW(2) D30 =SELECT.CHART0 D31 =CLEAR(1) D32 =GALLERY.SCATTER(2) D33 =ACTIVATE.NEXT0 D34 =SELECT(!$F$133:INDEX(!$G$133:$G$139,D28)) D35 =COPY() D36 =ACTIVATE.PREV0 D37 =PASTE.SPECIAL(2,TRUE,TRUE) D38 =RETURN() D39 =ALERT("Lessthan 2 time points in assay results",3) D40 =RETURN('ERROR')
Begin incrementing the value in the variable row.pointer until it equals the rownumber value.
D12 =lF(rownum=row_pointer,GOTO(D14),SET.NAME ("row_pointer',row_pointer+3)) D13 =IF(D11>6,GOTO(D40),GOTO(D11)) On the template spreadsheet, select the first OD value read and assign the cell it is in to the variable "cell "and the value in cell D l l to the variable "count".
D14 =CHOOSE(D11,SELECT('R[-97]C"),SELECT("R[-99]C'), SELECT('R[-101]C'),SELECT("R[-103]C'), SELECT("R[105]C'),SELECT('R[-107]C')) D15 =SET.NAME("celI',SELECTION0) Assign the value of the macro sheets cell D11 to the variable "count".
D16 =SET.NAME("count',DEREF(D11)) D17 =SET.VALUE(D18,0) D18 =D18+1 Begin copying the OD values from each reading of the plate into a work area on the template spreadsheet
D19 =COPY() D20 =SELECT(INDEX(!$G$134:$G$139,D18)) D21 =PASTE() Fig. 6. Chart function macro. The macro uses the built-in chart-making capabilities of the spreadsheet program to create a scatter chart for the development of OD in a well versus time, for any well selected by the user. The labels on the fight side of the ' = ' sign indicate the location (column and row) on the macro sheet of each command.
258
on the microtiter plate. Each of the 8 × 12 data arrays requires an associated value, in minutes, for the elapsed time from the start of the assay. In addition, the ELISA spreadsheet contains eight 2 x 11 arrays of cells used for calculations (Fig. 2). Each of the 2 x 11 arrays contains the calculated rates and correlation coefficients for a single row of wells on the microtiter plate. Since the Bio-Rad EIA reader uses the first column of each microtiter plate for blanking purposes, rates are not calculated for the first well of each row. After the OD data from each time point are entered into the ELISA spreadsheet, which can be done manually or by using the Loader macro (Fig. 3), the spreadsheet programs (Table I) for data analysis are then loaded and run. The rate calculation macro (Fig. 4) will discard all ODs outside of the linear range (these limits can be set by the user) and will calculate, by least-squares linear regression, the rate (which is the slope of the best fit line) of OD development in each well and the correlation coefficient. By selecting any cell containing a calculated rate, a scatter chart (Fig. 5) of the data can be constructed using a macro (Fig. 6), which takes advantage of Excel's graphics capability. By examining scatter charts of the data, the user can determine what OD limits to choose for the rate calculation macro so that only the linear region of OD development is used for the calculation. Once the rate calculations are done, the data, calculations, a n d / o r scatter charts can be printed or saved to disk.
Discussion The computer programs described here are capable of reading data from the Bio-Rad EIA reader, saving it to a disk as a formatted text file and performing a rate analysis of the data. The spreadsheet rate analysis program determines both the rate of OD development, from a least-squares linear regression, and a correlation coefficient for the linear regression calculations. If a correlation coefficient less than 0.90 is obtained, the data should be graphed (using the graph macro) to determine if one or more data points may lie outside the linear region of OD development. If this is found to be the case, the exclusion limits for the rate calculation program can be reset and the rates recalculated. This procedure will raise
the correlation coefficient and improve the accuracy of the rate calculations. Further analysis (such as determining the average and standard deviation for multiple samples) can be performed on the data using Excel's built-in statistical functions. In addition, since both the program Reader and Excel store data as formatted text files, other programs (such as statistical analysis programs) that are capable of reading in data from text files can also be used to carry out even more sophisticated analysis of the data. Because of the unusual way the Bio-Rad EIA reader transmits data, the program Reader will not work with other EIA readers without extensive rewriting of the data input procedures. However, since the program Excel and the spreadsheet macros operate independently of the program Reader, data from other EIA readers can be entered into the ELISA spreadsheet, and rates and correlation coefficients calculated for the manually entered data.
Acknowledgements Thanks are due to Frederick Huxham and Mary Lynn Cabbage for discussion and helpful suggestions during development of these programs, and to Dr. Alex Karu for suggestions during preparation of this paper. The Excel spreadsheet macros were developed under grant support by Program Project Grant HL-18574 and R01 Grant 333577 from the National Heart, Lung, and Blood Institute of the National Institutes of Health.
References Engvall, E. and Perlman, P. (1971) Enzyme-linked immunosorbent assay (ELISA). Quantitative assay of immunoglobulin G. Immunochemistry 8, 871. Franco, E.L., Walls, K.W., Sulzer, A.J., Campbell, G.H. and Robers, J.M. (1984) Computer-assisted multiple categorization of absorbance values in ELISA through pictorial emulation of 96-well plates. J. Immunol. Methods 70, 45. Richardson, M.D., Turner, A., Warnock, D.W. and Llewellyn, P.A. (1983) Computer-assisted rapid enzyme-linked inamunosorbent assay (ELISA) in serological diagnosis of aspergillosis. J. Imrnunol. Methods 56, 201. Van Weemen, B.K. and Schuurs, A.H.W.M. (1971) lmmunoassay using antigen-enzyme conjugates. FEBS Lett. 15, 232.