Code from oldes Eviews version to run into the newest eviews version 12.0

For questions regarding programming in the EViews programming language.

Moderators: EViews Gareth, EViews Jason, EViews Moderator, EViews Matt

jcgrass
Posts: 1
Joined: Fri Jun 18, 2021 5:46 pm

Code from oldes Eviews version to run into the newest eviews version 12.0

Postby jcgrass » Fri Sep 10, 2021 12:31 pm

Hi,

I tried to run this code taken from this expectacular blog of programmers (supuse used to make roc curve) but i can´t, seems to be is belongs to oldes eviews version. So it's possible to run in to the newest eviews version 12.0. What step do i have to do? Thanks

Juan Carlos Grass Galvis

Code: Select all

%dep = "grade"
%eq = "eq_probit"

' find valid observations
{%eq}.makeresid _xxe

' get number of 0 and 1
smpl if _xxe<>na and {%dep} = 0
!n0 = @obs({%dep})
smpl if _xxe<>na and {%dep} = 1
!n1 = @obs({%dep})

' get fittted values
smpl if _xxe<>na
{%eq}.forecast _xxyf
group a {%dep} _xxyf
stom(a, b)
stom(_xxyf, _xxprob)
' sort in descending order so we have threshold of infinity which is "off"
vector  _xxpranks = @ranks(_xxprob, "d", "i")
matrix _xxsdata = @capplyranks(b, _xxpranks)

' get unique fitted values
vector _xxuniq = @uniquevals(pranks)
!nunique = @rows(_xxuniq)
delete _xxuniq

' create output ROC matrix
matrix(!nunique+2, 4) _xxroc

' we start at threshold of infinity which is "off"
!ntype1 = 0 ' number of correct 1 predictions
!ntype0 = !n0 ' number of correct 0 predictions

!j = 1
!i = 1
!n = @rows(_xxsdata)
roc(1, 1) = 1 - (!ntype0 / !n0) ' 1 - specificity
roc(1, 2) = !ntype1 / !n1 ' sensitivity
roc(1, 3) = 0
roc(1, 4) = 0
while !j <= !nunique
   !target = _xxsdata(!i, 2)
   !val = !target
   while !val = !target
      !response = sdata(!i, 1)
      if (!response = 0) then
         !ntype0 = !ntype0 - 1
      endif
      if (!response = 1) then
         !ntype1 = !ntype1 + 1
      endif
      !i = !i+1
      if (!i > !n) then
         !val = 0
      else
         !val = sdata(!i, 2)
      endif
   wend
   _xxroc(!j+1, 1) = 1 - (!ntype0 / !n0)
   _xxroc(!j+1, 2) = !ntype1 / !n1
   _xxroc(!j+1, 3) = !j / !nunique
   _xxroc(!j+1, 4) = !j / !nunique
   !j = !j + 1
wend
_xxroc(!j+1, 1) = 1 - (!ntype0 / !n0)
_xxroc(!j+1, 2) = !ntype1 / !n1

delete(noerr) roc_graph
freeze(roc_graph) _xxroc.xypair
roc_graph.options linepat -legend size(4,4)
roc_graph.setelem(1) linewidth(1.15)
roc_graph.setelem(2) linepattern(8)
%title = "ROC graph for"
%title = %title + " " + @upper(%eq)
roc_graph.addtext(t, font("Ariel", 12)) %title
roc_graph.addtext(l) "True Positive Rate"
roc_graph.addtext(b) "False Positive Rate"
show roc_graph

delete _xx*

EViews Gareth
Fe ddaethom, fe welon, fe amcangyfrifon
Posts: 13306
Joined: Tue Sep 16, 2008 5:38 pm

Re: Code from oldes Eviews version to run into the newest eviews version 12.0

Postby EViews Gareth » Fri Sep 10, 2021 1:34 pm

Seems like it would work in EV12
Follow us on Twitter @IHSEViews


Return to “Programming”

Who is online

Users browsing this forum: No registered users and 26 guests