<%@ LANGUAGE="VBScript" %> <% ' ' call from http://marces.org/mdcat/home.htm Const NIT=48 DIM a(63), b(63), c(63), used(63), giv(63), iui(63), inum(63), top(5), tr, ca(50), cate(50),awh(3) tr=0 ' trial adaptive testing ' session.abandon awh(1)="3.2" awh(2)="3.3" awh(3)="3.5" pscore=-.4 ' passing score ii=0 ngg=0 ' number of items used to assess subskill thisip=request.servervariables("LOCAL_addr") '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub ASPInclude(sname, wr, aca, tca) Dim nchk,FObject,Instream,StrLIne set FObject = server.createobject("Scripting.FileSystemObject") set InStream = FObject.OpenTextFile(sname) nchk=1 while not InStream.atendofstream StrLine = InStream.readline ' StrLine=Replace(StrLine,"img src=""", "img src=""/CGI-BIN/cat/mdbio/") ' StrLine=Replace(StrLine,"
", " ") ' StrLine=Replace(StrLine,"
", " ") 'if wr =1 then ' mark correct answer goodstr="value=" kk=instr(strline,goodstr) if kk then goodstr="value="&tca k=instr(strline,goodstr) if k then kk=k+len(goodstr) strline=left(strline,kk)&"*" & mid(strline,kk+1) else kk=kk+7 strline=left(strline,kk)&"  " & mid(strline,kk+1) end if if nchk=1 then goodstr="value=" &aca k=instr(strline,goodstr) if k then kk=k+len(goodstr)-1 strline=left(strline,kk)&" CHECKED" & mid(strline,kk+1) end if ' StrLine=Replace(StrLine,"""1""", """1"" checked") end if end if 'else ' if nchk=1 then ' StrLine = Replace(StrLine,"""0""","""0"" checked") ' end if 'end if if instr(StrLine,"checked") then nchk=2 response.write(StrLine & vbNewLine) wend set Instream=nothing set FObject = nothing end sub '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub genicc(th, th2, j,ai,bi,ci,jfl,ii,see,typ,sc) ' typ 1 - Info function ' 2 - icc ' 3 - normal curve and see ' 4 - th x item no ' 5 - see x item no ' sc 0 - percentile ' 1 - z ' 2 MDHSA scale ' 3 - no image Dim Chart Set Chart = Server.CreateObject ("ASPChart.Chart") ' sc=0 ' if sc=3 then exit sub if typ=3 then ' superimpose area chart if th>-2.8 and th< 3.0 and see<2.0 then low=csng(th)-csng(see) hi=Csng(th)+csng(see) if low < -3.0 then low=-2.99 if hi > 3.0 then hi=2.99 Chart.AddSeries (4) i=vbYellow select case sc case 0 low=100*prbz(low) hi=100*prbz(hi) case 2 low = 500+100*low hi=500+100*hi end select Chart.addXY low,0,"",i Chart.addXY low,1,"",i Chart.addXY hi,1,"",i Chart.addXY hi,0,"",i end if end if If Typ=2 or typ=3 then ' chart true theta Chart.AddSeries (8) i=vbRed select case sc case 0 th3=100*prbz(th2) case 1 th3=th2 case 2 th3=500+100*th2 end select Chart.AddXY th3,0,"",i Chart.AddXY th3,1,"",i ' chart pscore Chart.AddSeries (8) i=vbGreen ' pscore= 1.5 select case sc case 0 th4=100*prbz(pscore) case 1 th4=pscore case 2 th4=500+100*pscore end select Chart.AddXY th4,0,"",i Chart.AddXY th4,1,"",i end if select case typ case 2,3 Chart.AddSeries (5) maxp=1 ' used in theta-hat i = 8080 'to generate a color select case sc case 0 alo=5 ahi=95 ast=5 case 1,2 alo=0 ahi=30 ast=2 end select ' For th1=0 to 30 step 2 ' ath=(th1-15)/5 for th1 = alo to ahi step ast select case sc case 0 ath=zfrpr(th1) th3=th1 case 1 ath=(th1-15)/5 th3=ath case 2 ath=(th1-15)/5 th3=500+100*ath end select select case typ case 2 dem = 1 + EXP(-1.7 * ai * (ath - bi)) pr = ci + ((1 - ci) / dem) case 3 pr=exp(-ath*ath/2) /1 ' sqr(2*3.14) end select Chart.AddXY th3,pr,"", i Next case 1 i = 8080 'to generate a color i=vbBlue maxp=-2 select case sc case 0 alo=5 ahi=95 ast=5 case 1,2 alo=0 ahi=30 ast=2 end select 'response.write sc & " sc
" for ib=1 to 4 Chart.AddSeries (5) jj=top(ib) if ib>1 then i=8080 for th1 = alo to ahi step ast select case sc case 0 ath=zfrpr(th1) th3= th1 case 1 ath=(th1-15)/5 th3=ath case 2 ath=(th1-15)/5 th3=500+100*ath end select pr=probt(ath,jj) pr= a(jj) * a(jj) * (1 - pr) * (pr - c(jj)) * (pr - c(jj)) / (pr * (1 - c(jj)) * (1 - c(jj))) Chart.AddXY th3,pr,"", i if pr>maxp then maxp=pr Next next case 4 Chart.AddSeries (5) thses=Session("thses") for ij=1 to ii th3=mid(thses,5*ij-4,5) if trim(th3)="" then th3="0" th1=cSng(th3) select case sc case 0 th3=100*prbz(th3) 'case 1 ' th3=th3 case 2 th3=500+100*th3 end select Chart.AddXY ij,th3,"", vbBlack next Chart.AddSeries (5) th4=th2 select case sc case 0 th4=100*prbz(th2) case 2 th4=500+100+th2 end select Chart.AddXY 1,th4,"",vbBlue Chart.AddXY ii,th4,"",vbBlue case 5 Chart.AddSeries (5) seeses=Session("seeses") ' response.write seeses & "
" ' thses=Session("thses") for ij=1 to ii th3=mid(seeses,4*ij-3,4) if trim(th3)="" then th3="0" th3=csng(th3) select case sc case 0 th1=mid(thses,5*ij-4,5) if trim(th1)="" then th1="0" th1=csng(th1) low=th1-th3 hi=th3+th1 if low < -2.99 then low=-2.99 if hi > 2.99 then hi=2.99 low=100*prbz(low) hi=100*prbz(hi) th3=(hi-low)/2 ' case 1 ' th3=th3 case 2 th3=100*th3 end select ' response.write ij &" "& th3 &"
" Chart.AddXY ij,th3,"", 8080 next end select If typ=1 or typ=3 then ' chart theta-hat Chart.AddSeries (8) i=vbBlack select case sc case 0 th3=100*prbz(th) case 1 th3=th case 2 th3=500+100*th end select Chart.AddXY th3,0,"",i Chart.AddXY th3,maxp,"",i end if Chart.BevelOuter = cNone ' Chart.GradientVisible = true ' Chart.GradientStartColor = RGB(&hff, &hff, &hdd) 'vbWhite ' Chart.GradientEndColor = vbYellow Chart.GradientVisible = false Chart.ChartBGColor = vbWhite Chart.PanelColor = vbWhite Chart.ChartTitleFontColor = vbBlue Chart.ChartTitleFont.Bold=true Chart.ChartTitleFont.Size=12 'Chart.HLabelStyle = 2 'Chart.ShowMinorTicks true, true select case typ case 1 Chart.ChartTitleAdd "Item Information Functions" case 2 Chart.ChartTitleAdd "Item Response Function" Case 3 Chart.ChartTitleAdd "Ability Estimation" Case 4 Chart.ChartTitleAdd "Ability Estimate x Item Number" Case 5 Chart.ChartTitleAdd "Standard Error x Item Number" end select ' was 30*8 and 50*8 Chart.Height = 30*8 Chart.Width = 50*8 Chart.LegendVisible = false Chart.View3D = false Chart.JPEGQuality = 60 Chart.ProgressiveJPEGEncoding=True select case typ case 1 Chart.AddAxisLabel 1, "Information" if maxp<1.0 then Chart.VertAxisMax= 1.0 else Chart.VertAxisMax= maxp+.1 end if case 2 Chart.AddAxisLabel 1, "Prob(u=1)" Case 3 Chart.AddAxisLabel 1, "Frequency" Chart.VLabelStyle = 1 Case 4, 5 Chart.AddAxisLabel 2, "Items Administered" end select if typ<4 then select case sc case 0 Chart.AddAxisLabel 2, "Percentile" case 1 Chart.AddAxisLabel 2, "z" case 2 Chart.AddAxisLabel 2, "Ability" end select else ' Chart.GradientVisible = false ' Chart.ChartBGColor = RGB(&hff, &hff, &hdd) ' Chart.PanelColor = RGB(&hff, &hff, &hdd) select case sc case 0 Chart.AddAxisLabel 1, "Percentile" case 1 Chart.AddAxisLabel 1, "z" case 2 Chart.AddAxisLabel 1, "Ability" end select end if select case typ case 1, 2, 3 select case sc case 0 Chart.HorizAxisMin=0.0 ' -3.0 Chart.HorizAxisMax=100.0 ' 3.0 case 1 Chart.HorizAxisMin= -3.0 Chart.HorizAxisMax= 3.0 case 2 Chart.HorizAxisMin=200 ' -3.0 Chart.HorizAxisMax= 800 ' 3.0 Chart.BottomAxisIncrement = 100 end select Chart.VertAxisMin = 0 Chart.LeftAxisIncrement = .2 case 4 ' ability estimate x items select case sc case 0 Chart.VertAxisMin=0.0 ' -3.0 Chart.VertAxisMax=100.0 ' 3.0 case 1 Chart.VertAxisMin= th2-1.0 Chart.VertAxisMax= th2+1.0 Chart.LeftAxisIncrement=.4 ' Chart.BottomAxisIncrement=1/ii Chart.ShowMinorTicks false, false case 2 Chart.VertAxisMin=200 ' -3.0 Chart.VertAxisMax= 800 ' 3.0 end select case 5 select case sc case 0 Chart.VertAxisMin=0.0 ' -3.0 Chart.VertAxisMax=50.0 ' 3.0 case 1 Chart.VertAxisMin= 0.0 Chart.VertAxisMax= 1.5 Chart.LeftAxisIncrement=.3 Chart.ShowMinorTicks false, false ' Chart.BottomAxisIncrement=1/ii case 2 Chart.VertAxisMin=0 ' -3.0 Chart.VertAxisMax= 150 ' 3.0 end select ' Chart.BottomAxisIncrement = 1 Chart.HorizAxisMin=1 ' response.write "ii "& ii & "
" Chart.HorizAxisMax= ii end select rem ********************************************************************** rem * Set the filename, save the image and write the image tag rem ********************************************************************** kid=Session("kid") ajfl=jfl & "a"& trim(kid) & trim(typ) & ".jpg" Chart.FileName = "g:\www\marces\cgi-bin\temp\" & ajfl Chart.SaveChart set Chart = nothing 'get rid of old one ojfl=jfl & "a"& trim(kid-1) & trim(typ) & ".jpg" ojfl = "g:\www\marces\cgi-bin\temp\" & ojfl Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FileExists(ojfl)) Then fso.DeleteFile(ojfl) ' response.write ojfl & "exists

" ' else ' response.write ojfl & " nope

" ' end if set fso = nothing end sub '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function rsetit (k) k1=trim(cstr(k)) while len(k1)<3 k1="0" & k1 wend rsetit=k1 end function '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function afmt (x,d) ' presents x numbers to d decimal places 'response.write x & " " & d &"
" x=csng(x)+0 y=CINT((10^d)*csng(x) )/10^d y=cstr(y) if d>0 then if instr(y,".")=0 then y=y&"." while len(y)-instr(y,".")5 then call genicc (th, tr, j,aa,bb,cc,jfl,ii,see,4,1) call genicc (th, tr, j,aa,bb,cc,jfl,ii,see,5,1) end if kid=Session("kid") ojfl=jfl & "a"& trim(kid) & "1" & ".jpg" ojfl = "g:\www\marces\CGI-BIN\temp\" & ojfl Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FileExists(ojfl)) Then fso.DeleteFile(ojfl) ojfl=jfl & "a"& trim(kid) & "2" & ".jpg" ojfl = "g:\www\marces\CGI-BIN\temp\" & ojfl If (fso.FileExists(ojfl)) Then fso.DeleteFile(ojfl) ojfl=jfl & "a"& trim(kid) & "3" & ".jpg" ojfl = "g:\www\marces\CGI-BIN\temp\" & ojfl If (fso.FileExists(ojfl)) Then fso.DeleteFile(ojfl) set fso=nothing %> Computer Adaptive Test Results

Computer Adaptive Test - Results

<% '

'Reason for termination: 'SELECT CASE j ' CASE -4 ' response.write "More than 40 items have been given" ' CASE -5 ' response.write "Standard error < .20." ' CASE -6 ' response.write "No informative items left in database." ' CASE -7 ' response.write "User terminated." ' CASE -8 ' response.write "Change in theta < .10 and see < .3." ' CASE -9 ' response.write "Theta out of range." ' CASE ELSE ' response.write "Unknown." 'END SELECT %> For the student

Summary

Passing score on the Maryland High School Biology Assessment is <%=500+100*pscore%>
Based on this testing, your estimated score will be <%=afmt(500+100*th,0)%> with a margin of error of <%=afmt(100*see,0)%>. This is at the <%=afmt(100 * prbz(th),0)%>th percentile.
You appear to have near a <%=afmt(100*prbz((th-pscore)/see),0)%> percent chance of passing the assessment.

Subskill Analysis

The following tables shows how well you did on each skill assessed by the Maryland High School Biology Assessment. You should pay special attention to areas with scores less than <%=afmt(500+100*pscore,0)%>.
<% seea=see bth=92+th*44 if bth<1 then bth=1 if bth>190 then bth=190 if seea>3 then seea=0 owidth=Cint(44*seea) owidth2=owidth if owidth<0 or tha<-2 then owidth=0 blankwidth=bth-2-owidth if blankwidth<0 then owidth=owidth-blankwidth blankwidth=0 end if if owidth2>88 then owidth2=88 if owidth<0 or tha<-2 then owidth=0 %> " response.write "" bth=92+pscore*44 if bth<1 then bth=1 if bth>190 then bth=190 seea=0 owidth=0 owidth2=0 blankwidth=bth-2-owidth if blankwidth<0 then owidth=owidth-blankwidth blankwidth=0 end if %> <% for iwh=1 to 4 select case iwh case 1 str1="1.2 The student will pose scientific questions and suggest experimental approaches to provide answers to questions." case 2 str1="1.4 The student will demonstrate that data analysis is a vital aspect of the process of scientific inquiry and communication." case 3 str1="1.6 The student will use mathematical processes." case 4 str1="3.1 The student will be able to explain the correlation between the structure and function of biologically important molecules and their relationship to cell processes." end select %> <% next afail=0 for iwh=1 to 4 fail(iwh)=0 select case iwh case 1 str0="3.2" str1="3.2 The student will demonstrate an understanding that all organisms are composed of cells which can function independently or as part of multicellular organisms." case 2 str0="3.3" str1="3.3 The student will analyze how traits are inherited and passed on from one generation to another." case 4 str0="3.5" str1="3.5 The student will investigate the interdependence of diverse living organisms and their interactions with the components of the biosphere" end select if iwh<>3 then seea=3 tha=th CALL getntheta(seea, tha, ii,str0) ' ngg is the number of good items. use it to prevent crashes bth=92+tha*44 if prbz((tha-pscore)/seea)<.65 and tha<2 then fail(iwh)=1 afail=1 end if if bth<1 then bth=1 if bth>190 then bth=190 if seea>3 then seea=0 owidth=Cint(44*seea) owidth2=owidth blankwidth=bth-2-owidth if owidth<0 or tha<-2 then owidth=0 if blankwidth<0 then owidth=owidth-blankwidth blankwidth=0 end if if owidth2>88 then owidth2=88 if owidth<0 or tha<-2 then owidth=0 %>" response.write "" else response.write " - " response.write "" end if else %> <% end if next %>
Overall <% response.write "" & afmt(500+100*th,0) if see> 0 then response.write " +/- "& afmt(100*see,0) response.write "
Passing score <%=afmt(500+100*pscore,0)%> >
 
Sub Skills
 <%=str1%> -  
 <%=str1%> <% if ngg>0 then response.write "" & afmt(500+100*tha,0) if seea>0 then response.write " +/- "& afmt(100*seea,0) response.write "
 
 3.4 The student will explain the mechanism of evolutionary change. -  
<% if afail=1 then %> Suggestions

You appear to have done poorly on the following Expectations outlined by the Maryland State Department of Education. You are encouraged to carefully examine these Expectations, Indicators and Resources.

<% if fail(1)=1 then %>

Expectation 3.2 The student will demonstrate an understanding that all organisms are composed of cells which can function independently or as part of multicellular organisms.

    Suggested Resources

xxx
xxx
xxx
xxx

<% end if if fail(2)=1 then %>

Expectation 3.3 The student will analyze how traits are inherited and passed on from one generation to another.

    Suggested Resources

xxx
xxx
xxx
xxx

<% end if if fail(4)=1 then %>

Expectation 3.5 The student will investigate the interdependence of diverse living organisms and their interactions with the components of the biosphere.

    Suggested Resources

xxx
xxx
xxx
xxx

<% end if end if %>
Review of taken items

<% for i = 1 to ii j=giv(i) response.write "" response.write "
Item " & i & "    Indicator " & cate(j) & "Your
response
Correct
Response
" 'sname="g:\www\marces\cgi-bin\cat\mdbio\" & inum(j) & ".htm" sname="g:\www\marces\mdcat\mdbio\" & inum(j) & ".htm" Dim nchk,FObject,Instream,StrLIne set FObject = server.createobject("Scripting.FileSystemObject") set InStream = FObject.OpenTextFile(sname) nchk=1 while not InStream.atendofstream StrLine = InStream.readline response.write(StrLine & vbNewLine) wend set Instream=nothing set FObject = nothing response.write "
" response.write "" & mid(anss,i,1) & "" response.write "" & ca(j) & "" response.write "
" next %>


Statistical Background

We started with a true score of <%=afmt(500+100*tr,0)%>. After you answered <%=ii%> items, the CAT software extimated your ability as <%=afmt(500+100*th,0)%> +/-<%=afmt(100*see,0)%>. <% 't1=csng(th)-cSng(see) 't2=cSng(th)+cSng(see) 'response.write afmt((500+100 * t1),0) & " and " & afmt((500+100*t2),0) & " which is between the " ' 't1=csng(th)-cSng(see) 't2=cSng(th)+cSng(see) 'response.write afmt((100 * prbz(t1)),0) & "th and the " & afmt((100*prbz(t2)),0) & "th percentiles." %>

Here is the history for this computer adaptive test session:

<% isstar=0 for i=1 to ii ' theta-hat history: =thses ' see history: seeses 'th=mid(thses,5*i-4,5) 'see=mid(seeses,4*i-3,4) th=mid(thses,5*i+1,5) see=mid(seeses,4*i+1,4) pr=afmt(probt2(tr,giv(i)),2) u=" " star=" " if iui(i)=0 then u=" in" if pr>.5 then star=" **" else if pr<.5 then star=" **" end if if trim(star) <>"" then istar=1 %> <% next if istar=1 then %> <% end if %>
Item Selection and Response History
(in MDHSA-score units)
Item Item
difficulty
bi
Expectation Prob Correct Response Estimated
ability
Standard
error
<%=i%>
<%=afmt(b(giv(i)),2)%>
<%=cate(giv(i))%>
<%=pr%>
<%=u%>correct<%=star%>
<%=afmt(500+100*cstr(th),0)%>
<%=afmt(100*see,0)%>
        ** This response
was not expected.
   

What to look for: <% if ii>5 then ab="As shown on the next graph, t" else ab="T" %>

From: Rudner, Lawrence M. (2001). Proof-of-concept for an on-line computer-adaptive-test for MSDE, Maryland Assessment Research Center for Education Success, University of Maryland, College Park http://marces.org/mdcat/


<% 'jfl=Trim(Session("jfl")) 'if len(jfl) > 1 then ' filespec="g:\www\marces\cgi-bin\temp\"& jfl & "*.jpg" ' filespec="g:\www\marces\cgi-bin\temp\*.jpg" ' Dim fso ' Set fso = CreateObject("Scripting.FileSystemObject") ' If (fso.FileExists(filespec)) Then ' response.write " exists." ' fso.DeleteFile(filespec) ' else ' response.write " does not exist." ' end if ' set fso = nothing 'end if ' session.abandon END SUB '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB genhtml2 (see, seeold, ii, th, j,jfl,inum, tr,image,rev,sc,ians) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 'afl="g:\www\marces\cgi-bin\cat\mdbio\" & inum(j) & ".htm" afl="g:\www\marces\mdcat\mdbio\" & inum(j) & ".htm" ' response.write afl & "
" if sc <> 3 then kid=session("kid") kid=kid+1 session("kid")=kid ' call genicc (th, tr, j,a(j),b(j),c(j),jfl,ii,see,1,sc) ' call genicc (th, tr, j,a(j),b(j),c(j),jfl,ii,see,2,sc) if ii > 4 then call genicc (th, tr, j,a(j),b(j),c(j),jfl,ii,see,3,sc) ' kid=Session("kid") end if th1=afmt(th,2) while len(th1)<5 th1=" " & th1 wend see1=afmt(see,2) while len(see1)<4 see1=" " & see1 wend thses=Session("thses") seeses=Session("seeses") thses=left(thses,5*(ii-1)) & th1 seeses=left(seeses,4*(ii-1)) & see1 Session("thses")=thses Session("seeses")=seeses %> Computer Adaptive Test
Presenting item <%=ii%> - <%=inum(j)%> Category <%=cate(j)%>
<% if probt(tr,j)>.500 then wr=1 else wr=0 if wr=1 then aca= ca(j) else aca=ca(j)-1 if aca<1 then aca=ca(j)+1 end if call ASPInclude(afl,wr, aca, ca(j)) ' add missing from msde table %>
<% g = "" FOR i = 1 TO ii aa = " " aa=rsetit(giv(i)) g = g & aa NEXT %> <% r = "" FOR i = 1 TO ii r = r & TRIM(CSTR(iui(i))) NEXT cpr=afmt(probt2(tr,j),2) if b(j) <-.84 then ity="a very easy" if b(j)< -.25 and b(j)>-.84 then ity="an easy" if b(j)<.25 and b(j)>-.25 then ity="an average diffculty" if b(j)> .25 and b(j)<.84 then ity="a hard" if b(j) >.84 then ity="a very hard" %>
(This is <%=ity%> item.)
(The probability of a correct response is <%=cpr%>.)
<% if ii<6 or see > .35 then response.write "  Please don't stop yet." %>
<% if ii>4 then sc0="" sc1= "" sc2= "" sc3="" select case sc case 1 sc1=" checked" case 2 sc2=" checked" case 3 sc3=" checked" case 0 sc0=" checked" end select %>
Image below & Scale: >No Images
>Percentile
>z-scores
>MDHSA scores
<% else %> > <% end if %>


Background Statistical Information
(The student would not see this)

<% if ii< 5 then response.write "   You have taken "& ii-1 & " items. Detailed information will appear here after 4 items are taken." else if sc<>3 then %> <% select case sc case 0 aa="percentile" cth=afmt(100*prbz(th),0) ctold=afmt(100*prbz(told),0) ctr=afmt(100*prbz(tr),0) case 1 aa= "z-score" cth=afmt(th,2) ctold=afmt(told,2) ctr=afmt(tr,2) case 2 aa="MDHSA score" cth=500+100*th ctold=500+100*told ctr=500+100*tr cth=afmt(cth,0) ctold=afmt(ctold,0) ctr=afmt(ctr,0) end select if cpr<.50000 then ab="wrong" sn="<" else ab="right" sn=">" end if typ=3 jfl1="http://"& thisip & "/CGI-BIN/temp/"&trim(jfl) & "a" & trim(kid) & trim(typ) & ".jpg" %>

<% sc0="" sc1= "" sc2= "" sc3="" select case sc case 1 sc1=" checked" case 2 sc2=" checked" case 3 sc3=" checked" case 0 sc0=" checked" end select if ii>4 and 1=2 then %>
Image & Scale:
>No Images
>Percentile
>z-scores
>MDHSA scores
<% end if %>

The curve shows the distribution of ability in terms of <%=aa%>s. The red line shows the true ability (a <%=aa%> score of <%=ctr%>). The green line shows the passing score. The black line shows the current estimate (a <%=aa%> score of <%=cth%>). <% if th>-2.8 and th< 3.0 and see<2.0 then %> The yellow band shows the standard error. <%else%> Since we just started, the standard error is extremely large. When the standard error is smaller, it will be shown as a yellow band. <%end if %> The goal is to have little error and to have the current estimate reflect true ability. Explain


<% end if %>

<% tmp1="" if cdbl(tr) < cdbl(pscore) then tmp1="not" %> <% ppass= (th-pscore)/see %> <% if ii> 1 then %> <% end if %> <% if ii>1 then %> <% end if %> <% if see<2 then %> <% end if %>
Percentiles MDHSA units z-score units
True ability <%=afmt(100*prbz(tr),0)%> <%=afmt(500+100*tr,0)%> <%=afmt(tr,2)%>
Passing Score <%=afmt(100*prbz(pscore),0)%> <%=afmt(500+100*pscore,0)%> <%=afmt(pscore,2)%>
    This person should <%=tmp1 %> pass.
 
Current ability estimate <%=afmt(100*prbz(th),0)%> <%=afmt(500+100*th,0)%> <%=afmt(th,2)%>
    Current estimated probability of passing <%=afmt(100*prbz(ppass),0)%>%
Prev ability estimate <%=afmt(100*prbz(told),0)%> <%=afmt(500+100*told,0)%> <%=afmt(told,2)%>
 
Current Stand Error <%=afmt(100*prbz(see),0)%> <%=afmt(100*see,0)%> <%=afmt(see,2)%>
Prev Stand Error <%=afmt(100*prbz(seeold),0)%> <%=afmt(100*seeold,0)%> <%=afmt(seeold,2)%>

Current confid interval

<%=afmt((100 * prbz(csng(th)-cSng(see))),0)%>th - <%=afmt((100*prbz(csng(th)+cSng(see))),0)%>th

<%=afmt((500+100 *(csng(th)-cSng(see))),0)%> - <%=afmt((500+100*(csng(th)+cSng(see))),0)%>

<%=afmt((csng(th)-cSng(see)),2)%> - <%=afmt((csng(th)+cSng(see)),2)%>
Prev confid interval <%=afmt((100 * prbz(csng(told)-cSng(seeold))),0)%>th - <%=afmt((100*prbz(csng(told)+cSng(seeold))),0)%>th <%=afmt((500+100 *(csng(told)-cSng(seeold))),0)%> - <%=afmt((500+100*(csng(told)+cSng(seeold))),0)%> <%=afmt((csng(told)-cSng(seeold)),2)%> - <%=afmt((csng(told)+cSng(seeold)),2)%>
Items taken <%=afmt(ii-1,0)%>  
<% end if ' ii< 5 %>

From: Rudner, Lawrence M. (2001). Proof-of-concept for an on-line computer-adaptive-test for MSDE, Maryland Assessment Research Center for Education Success, University of Maryland, College Park http://marces.org/mdcat/

<% END SUB '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB getcom (ii, th, ians, see,iui, jfl, image, rev,sc) ians = 9 ' default. If no answer then quit testing. jfl=Session("jfl") sc=Request("sc") ii=Request("I") see=Request("S") t=Request("T") tr=Request("TR") tr2=Cint("0"&Request("TR2")) if trim(tr)="" then tr=0 if tr2>399 and tr2<601 then tr=(tr2-500)/100 th=t ' which items have been given g=Request("G") iresp=trim(Request("U")) if ii>0 then FOR i = 1 TO ii giv(i) = csng(MID(g, i * 3 - 2, 3)) NEXT ' right wrong responses r=Request("R") FOR i = 1 TO ii aa = MID(r, i, 1) ' response.write aa & "
" iui(i) = aa NEXT if len(iresp)<>1 then iresp="0" anss=Session("anss") anss=left(anss,(ii-1)) & iresp Session("anss")=anss end if ians=0 if ii > 0 then iresp=iresp + 0 ' response.write "

" & iresp & " " & ca(giv(ii)) & "

" if iresp = ca(giv(ii)) then ians=1 end if ' response.write ians & "

" 'ians=Request("U") cmd=Request("cmd") if left(cmd,3)="All" then ians=9 'image="" 'image=request("image") if sc=3 then image="off" else image="on" rev=Request("rev") END SUB '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB getntheta (see, th, ii, lmt) ' see - standard error - returned ' th - theta in and updated ' ii - number of administered items ' ui - reposnse (correct=1, else=0) ' lmt - limit analysis to certain categories, "0" to not limit ' ' formula is from Baker () Basics if Item Response Theory, p 66 nl = 0 ngg=1 if len(lmt)=0 then lmt="0" DO tdem = 0 tnum = 0 tho = th ngg=0 nl = nl + 1 FOR i = 1 TO ii j = giv(i) lcate=left(cate(j),3) if lmt="0" or lmt=lcate then pr = probt(th, j) tdem = tdem + a(j) * a(j) * pr * (1 - pr) tnum = tnum + a(j) * (iui(i) - pr) ' response.write "

" & i & " " & iui(i) & " " & pr & " " & th & "

" ngg = ngg + 1 end if NEXT ' IF ii < 3 THEN tho = th ' response.write "

" & th if ngg>0 then th = th + (tnum / tdem) ' response.write " "&th &"
" ' IF th > 3 THEN th = 3: tho = 3 ' IF th < -3 THEN th = -3: tho = -3 IF th > 3 THEN th = 3 IF th < -3 THEN th = -3 LOOP UNTIL (ABS(th - tho) < .05 OR nl > 100) and (nl>4) or ngg=0 if ngg>0 then see = 1 / SQR(tdem) ' response.write "

" & ngg &" " & th & "

" IF see > 99 THEN see = 99 if see> 6.0 then see=6.0 ' lmr END SUB '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTION maxinf (th) 'formula from Lord (1980) Applcations of IRT to practical ' testing problems, p 61 (4-40), p72 (5-9) ibest = -6 iii=(ii mod 3) +1 'for ib=1 to 5 ib=1 tmax = -2.1 FOR i = 1 TO NIT IF used(i) = 0 and left(cate(i),3)=awh(iii) THEN ' tdl = -1.7 * a(i) * (th - b(i)) ' prp = (-1.7 * a(i) * (1 - c(i))) / (EXP(tdl) + 2 + EXP(-1 * tdl)) pr = probt(th, i) pr=cdbl(pr) ' tinfo = (prp * prp) / (pr * (1 - pr)) tinfo = a(i) * a(i) * (1 - pr) * (pr - c(i)) * (pr - c(i)) / (pr * (1 - c(i)) * (1 - c(i))) IF tinfo > tmax THEN tmax = tinfo ibest = i END IF END IF NEXT if ibest>0 then top(ib)=ibest used(ibest)=9 end if 'next ' IF tmax < .3 THEN ibest = -6 ' give up no good items left ' IF tmax <= 1! AND (200 < th OR th < -200) THEN ibest = -6' give up no good items left 'for ib=1 to 5 ' j=top(ib) ' used(j)=0 'next maxinf = top(1) END FUNCTION '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTION prbz (t1) ' percentile from z tpr = 1 / (1 + EXP(-1.7 * t1)) prbz = tpr END FUNCTION '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTION zfrpr (pr1) ' z from percentile pr2=pr1/100.0 if pr2=0 then pr2=.0001 tpr =-1*Log((1/pr2)-1)/1.7 zfrpr = tpr END FUNCTION '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTION probt2 (th, j) ' probability of a correct repsonse on item j for examine of ability th 'IF th < -5 THEN th = -5 dem = 1 + EXP(-1.7 * a(j) * (th - b(j))) pr = c(j) + ((1 - c(j)) / dem) IF pr < .01 THEN pr = .01 IF pr > .99 THEN pr = .99 probt2 = pr END FUNCTION '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FUNCTION probt (th, j) ' probability of a correct repsonse on item j for examine of ability th 'IF th < -5 THEN th = -5 dem = 1 + EXP(-1.7 * a(j) * (th - b(j))) pr = c(j) + ((1 - c(j)) / dem) IF pr < .00001 THEN pr = .00001 IF pr > .99999 THEN pr = .99999 probt = pr END FUNCTION '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SUB loaddata inum(1)="v1" ca(1)= 1 a(1)= 3.469 b(1)= 1.686 c(1)= .25 cate(1)="1.2.6" inum(2)="v2" ca(2)= 3 a(2)= 2.867 b(2)= 1.829 c(2)= .25 cate(2)="1.2.5" inum(3)="v3" ca(3)= 4 a(3)= 3.028 b(3)= 0.450 c(3)= .25 cate(3)="1.4.2" inum(4)="v4" ca(4)= 3 a(4)= 2.013 b(4)= 1.743 c(4)= .25 cate(4)="1.4.6" inum(5)="v5" ca(5)= 4 a(5)= 2.057 b(5)= 1.657 c(5)= .25 cate(5)="1.2.8" inum(6)="v6" ca(6)= 1 a(6)= 3.712 b(6)= -.357 c(6)= .25 cate(6)="1.2.1" inum(7)="v8" ca(7)= 1 a(7)= 1.049 b(7)= 0.550 c(7)= .25 cate(7)="1.2.6" inum(8)="v9" ca(8)= 3 a(8)= 3.663 b(8)= -.829 c(8)= .25 cate(8)="1.6.3" inum(9)="v10" ca(9)= 1 a(9)= 3.851 b(9)= -1.136 c(9)= .25 cate(9)="3.1.2" inum(10)="v11" ca(10)= 3 a(10)= 3.482 b(10)= -.614 c(10)= .25 cate(10)="3.1.1" inum(11)="v13" ca(11)= 3 a(11)= 1.159 b(11)= -.729 c(11)= .25 cate(11)="3.1.1" inum(12)="v14" ca(12)= 3 a(12)= 2.449 b(12)= -.357 c(12)= .25 cate(12)="3.1.1" inum(13)="v15" ca(13)= 2 a(13)= 4.019 b(13)= -.707 c(13)= .25 cate(13)="3.1.1" inum(14)="v16" ca(14)= 2 a(14)= 3.767 b(14)= -.314 c(14)= .25 cate(14)="3.1.2" inum(15)="v18" ca(15)= 1 a(15)= 2.307 b(15)= -1.629 c(15)= .25 cate(15)="3.1.2" inum(16)="v19" ca(16)= 1 a(16)= 4.367 b(16)= 0.864 c(16)= .25 cate(16)="3.2.1" inum(17)="v20" ca(17)= 4 a(17)= 4.050 b(17)= -1.264 c(17)= .25 cate(17)="3.2.1" inum(18)="v21" ca(18)= 2 a(18)= 1.197 b(18)= -.486 c(18)= .25 cate(18)="3.2.1" inum(19)="v23" ca(19)= 1 a(19)= 4.323 b(19)= -1.136 c(19)= .25 cate(19)="3.2.1" inum(20)="v24" ca(20)= 4 a(20)= 2.274 b(20)= -1.314 c(20)= .25 cate(20)="3.1.3" inum(21)="v25" ca(21)= 3 a(21)= 2.837 b(21)= -.393 c(21)= .25 cate(21)="3.2.1" inum(22)="v26" ca(22)= 4 a(22)= 3.685 b(22)= 1.343 c(22)= .25 cate(22)="3.2.1" inum(23)="v27" ca(23)= 3 a(23)= 1.187 b(23)= 0.000 c(23)= .25 cate(23)="3.2.1" inum(24)="v28" ca(24)= 2 a(24)= 3.074 b(24)= -.586 c(24)= .25 cate(24)="3.2.1" inum(25)="v29" ca(25)= 2 a(25)= 2.640 b(25)= -.393 c(25)= .25 cate(25)="3.2.1" inum(26)="v30" ca(26)= 2 a(26)= 2.044 b(26)= 0.243 c(26)= .25 cate(26)="3.3.1" inum(27)="v31" ca(27)= 2 a(27)= 3.179 b(27)= 0.007 c(27)= .25 cate(27)="3.3.2" inum(28)="v33" ca(28)= 2 a(28)= 3.267 b(28)= 1.600 c(28)= .25 cate(28)="3.3.4" inum(29)="v34" ca(29)= 4 a(29)= 1.923 b(29)= -1.529 c(29)= .25 cate(29)="3.3.1" inum(30)="v35" ca(30)= 2 a(30)= 1.978 b(30)= -1.464 c(30)= .25 cate(30)="3.3.2" inum(31)="v36" ca(31)= 2 a(31)= 3.904 b(31)= -.493 c(31)= .25 cate(31)="3.3.2" inum(32)="v37" ca(32)= 3 a(32)= 3.886 b(32)= -.493 c(32)= .25 cate(32)="3.3.2" inum(33)="v39" ca(33)= 2 a(33)= 3.062 b(33)= -.807 c(33)= .25 cate(33)="3.3.2" inum(34)="v40" ca(34)= 2 a(34)= 4.451 b(34)= 0.043 c(34)= .25 cate(34)="3.3.3" inum(35)="v41" ca(35)= 4 a(35)= 4.188 b(35)= -.229 c(35)= .25 cate(35)="3.4.2" inum(36)="v42" ca(36)= 3 a(36)= 1.794 b(36)= -1.171 c(36)= .25 cate(36)="3.4.2" inum(37)="v43" ca(37)= 3 a(37)= 3.433 b(37)= 0.671 c(37)= .25 cate(37)="3.4.1" inum(38)="v44" ca(38)= 1 a(38)= 4.430 b(38)= 1.107 c(38)= .25 cate(38)="3.4.1" inum(39)="v45" ca(39)= 1 a(39)= 1.854 b(39)= 0.857 c(39)= .25 cate(39)="3.4.2" inum(40)="v46" ca(40)= 4 a(40)= 2.869 b(40)= -.643 c(40)= .25 cate(40)="3.5.2" inum(41)="v47" ca(41)= 4 a(41)= 1.372 b(41)= -.579 c(41)= .25 cate(41)="3.5.4" inum(42)="v49" ca(42)= 1 a(42)= 4.498 b(42)= 1.593 c(42)= .25 cate(42)="3.5.2" inum(43)="v50" ca(43)= 2 a(43)= 3.367 b(43)= 1.371 c(43)= .25 cate(43)="3.5.4" inum(44)="v51" ca(44)= 1 a(44)= 1.055 b(44)= 0.143 c(44)= .25 cate(44)="3.5.4" inum(45)="v52" ca(45)= 2 a(45)= 3.013 b(45)= 1.443 c(45)= .25 cate(45)="3.5.1" inum(46)="v53" ca(46)= 1 a(46)= 1.350 b(46)= 0.471 c(46)= .25 cate(46)="3.5.2" inum(47)="v54" ca(47)= 1 a(47)= 1.361 b(47)= 0.900 c(47)= .25 cate(47)="3.5.1" inum(48)="v55" ca(48)= 1 a(48)= 3.796 b(48)= -.921 c(48)= .25 cate(48)="3.5.1" inum(19)="v19" ca(19)= 1 a(19)= 3.469 b(19)= .8 c(19)= .25 cate(19)="3.2.1" inum(20)="v20" ca(20)= 4 a(20)= 2.867 b(20)=-1.3 c(20)= .25 cate(20)="3.2.1" inum(21)="v21" ca(21)= 2 a(21)= 3.028 b(21)=-.4 c(21)= .25 cate(21)="3.2.1" inum(22)="v23" ca(22)= 1 a(22)= 2.013 b(22)=-1 c(22)= .25 cate(22)="3.2.1" inum(23)="v25" ca(23)= 3 a(23)= 2.057 b(23)=-.1 c(23)= .25 cate(23)="3.2.1" inum(24)="v26" ca(24)= 4 a(24)= 3.712 b(24)= 1.1 c(24)= .25 cate(24)="3.2.1" inum(25)="v27" ca(25)= 3 a(25)= 1.049 b(25)= .5 c(25)= .25 cate(25)="3.2.1" inum(26)="v28" ca(26)= 2 a(26)= 3.663 b(26)=-.7 c(26)= .25 cate(26)="3.2.1" inum(27)="v29" ca(27)= 2 a(27)= 3.851 b(27)= .2 c(27)= .25 cate(27)="3.2.1" inum(28)="v30" ca(28)= 2 a(28)= 3.482 b(28)=-.9 c(28)= .25 cate(28)="3.3.1" inum(29)="v31" ca(29)= 2 a(29)= 1.159 b(29)= .6 c(29)= .25 cate(29)="3.3.2" inum(30)="v33" ca(30)= 2 a(30)= 2.449 b(30)= 1.2 c(30)= .25 cate(30)="3.3.4" inum(31)="v34" ca(31)= 4 a(31)= 4.019 b(31)=-1.2 c(31)= .25 cate(31)="3.3.1" inum(32)="v35" ca(32)= 2 a(32)= 3.767 b(32)=-.6 c(32)= .25 cate(32)="3.3.2" inum(33)="v36" ca(33)= 2 a(33)= 2.307 b(33)= .3 c(33)= .25 cate(33)="3.3.2" inum(34)="v37" ca(34)= 3 a(34)= 4.367 b(34)= 0 c(34)= .25 cate(34)="3.3.2" inum(35)="v39" ca(35)= 2 a(35)= 4.050 b(35)=-.3 c(35)= .25 cate(35)="3.3.2" inum(36)="v40" ca(36)= 2 a(36)= 1.197 b(36)= .9 c(36)= .25 cate(36)="3.3.3" inum(40)="v46" ca(40)= 4 a(40)= 4.323 b(40)=-.2 c(40)= .25 cate(40)="3.5.2" inum(41)="v47" ca(41)= 4 a(41)= 2.274 b(41)= .7 c(41)= .25 cate(41)="3.5.4" inum(42)="v49" ca(42)= 1 a(42)= 2.837 b(42)= .4 c(42)= .25 cate(42)="3.5.2" inum(43)="v50" ca(43)= 2 a(43)= 3.685 b(43)= 1.3 c(43)= .25 cate(43)="3.5.4" inum(44)="v51" ca(44)= 1 a(44)= 1.187 b(44)= 1 c(44)= .25 cate(44)="3.5.4" inum(45)="v52" ca(45)= 2 a(45)= 3.074 b(45)=-.5 c(45)= .25 cate(45)="3.5.1" inum(46)="v53" ca(46)= 1 a(46)= 2.640 b(46)= .1 c(46)= .25 cate(46)="3.5.2" inum(47)="v54" ca(47)= 1 a(47)= 2.044 b(47)=-.8 c(47)= .25 cate(47)="3.5.1" inum(48)="v55" ca(48)= 1 a(48)= 3.179 b(48)=-1.1 c(48)= .25 cate(48)="3.5.1" for i=1 to NIT a(i)=2.0 c(i)=.15 next end sub '------------------------------------------------- ' Main program '------------------------------------------------- jfl=session("jfl") if trim(jfl)="" then randomize jfl="j" & int(RND*1000) Session("jfl")=jfl thses="" ' space(100) seeses="" ' space(100) Session("thses")=thses Session("seeses")=seeses Session("kid")=0 end if ' kid=session("kid") ' kid=kid+1 ' session("kid")=kid call loaddata RANDOMIZE TIMER FOR i = 1 TO NIT used(i) = 0 'response.write cStr(inum(i))&"
" NEXT 'response.end CALL getcom(ii, th, ians, see,iui,jfl,image,rev,sc) toth = .5 ' for debug IF ii = 0 THEN ' No items, start them in STARTCAT.htm response.redirect "mdcat.htm" END if if ii<0 then ' first item (-1 passed from startcat ii = 1 ' item administered (sequential) th = 0 ' th=rnd*.8 - .4 ' image="on" see=6 ' j = maxinf(th) ' randomly select from hard-coded mid difficult items temp="2327344046" randomize ilt= Int(5*rnd(1))+1 ' response.write "

" & ilt & "

" j=Cint(mid(temp,2*ilt-1,2)) ' response.write "

Item "& j & " Theta=" & th & "

" used(j) = 1 giv(ii) = j CALL genhtml2(see,seeold, ii, th, j, jfl, inum,tr,image,rev,sc,ians) response.end end if FOR i = 1 TO ii used(giv(i)) = 1 NEXT ' ians=1 (right) ' ians=2,0 (wrong) ' ians=9 (done) SELECT CASE ians CASE 2, 0 iui(ii) = 0 CASE 1 iui(ii) = 1 CASE 9 ii = ii - 1 j = -7 END SELECT IF ians < 8 THEN told = th seeold=see CALL getntheta(see, th, ii,"0") if ii> 40 then j=-4 else IF see < .020 THEN ' was .20 j = -5 ELSE j = maxinf(th) IF j > 0 THEN ' j=-6 if no good items left used(j) = 1 ii = ii + 1 giv(ii) = j END IF ' END IF END IF END IF END IF IF j > 0 THEN CALL genhtml2(see,seeold, ii, th, j, jfl,inum, tr,image,rev,sc,ians) response.END ELSE CALL gendone(see, th, ii, j, tr,jfl,sc) response.END END IF response.END %>