Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

st: Calculating Borda Count within group


From   philippe.vankerm@ceps.lu
To   statalist@hsphsun2.harvard.edu
Subject   st: Calculating Borda Count within group
Date   Thu, 22 Apr 2004 16:26:44 +0200

Tonya,

As an alternative to what Stephen Jenkins suggested, what abour stg like

foreach var of varlist pd1 pl1 pu1 {
  by grpid: gen r`var' = sum((max(`var',pd1)==`var') + 
(max(`var',pl1)==`var') + (max(`var',pu1)==`var'))
  }
by grpid: gen borda = (max(rpd1[_N],rpl1[_N],rpu1[_N])==rpd1[_N])  if 
_n==_N
tab borda 

* or is it as follows - I'm not too sure I understand clearly what you 
want:
bys grpid: gen bordaBIS = 
(max(rpd1[_N],rpl1[_N],rpu1[_N])==rpd1[_N])==death  if _n==_N
tab bordaBIS 


Philippe


>>>>>>>>>>>>>

From
  "Tonya Cropper" <tonya_cropper@ksgphd.harvard.edu>
To
  "Statalist" <statalist-digest@hsphsun2.harvard.edu>
Subject
  st: Calculating Borda Count within group
Date
  Thu, 22 Apr 2004 09:22:17 -0400


Dear Statalisters:

I wrote a program to calculate a Borda count result of predicted
probabilities of people within groups.  The program calculates the results 
I
want, but I am hoping there's a more efficient way of doing it.  Within 
each
group, I want to rank each person's predicted probability for three
outcomes(Pd, Pl, Pu). I have multiple sets of these probabilites based on
different models, so I performed the counts in a loop.  I gave each person 
a
score of 3 for the highest probability, 2 for the 2nd, and 1 for the 
lowest.
I then summed each outcome to get a total Borda score.  If Pd was the
highest score, then the Borda result is 1 and 0 otherwise (I mainly care
about Pd, ties will go to Pl, Pu is undecided).  Below is an example.  I
will appreciate any assistance to streamline the program.  Thank you.

        Pd1    Pl1    Pu1    death
id1    .275    .401    .324    0
id2    .582    .163    .255    0
id3    .072    .630    .298    0
id4    .489    .064    .446    0
id5    .242    .400    .358    0


Borda ranking result :
                Pd1    Pl1    Pu1
        id1    1        3        2
        id 2   3        1        2
        id3    1        3        2
        id4    3        1        2
        id5    1        3        2
Borda count:9    11     10
result/borda1 = 0
success =1 (since death=board1)


*** Borda Count **
gen rPd`i'=0
gen rPl`i'=0
gen rPu`i'=0

local i=1
while i<= 3 {
if (Pd`i'>Pl`i') & (Pl`i'>Pu`i') {
replace rPd`i'=3
replace rPl`i'=2
replace rPu`i'=1
}
else if (Pd`i'>Pu`i') & (Pu`i'>Pl`i') {
replace rPd`i'=3
replace rPl`i'=1
replace rPu`i'=2
}
else if (Pl`i'>Pd`i') & (Pd`i'>Pu`i') {
replace rPd`i'=2
replace rPl`i'=3
replace rPu`i'=1
}
else if (Pl`i'>Pu`i') & (Pu`i'>Pd`i') {
replace rPd`i'=2
replace rPl`i'=1
replace rPu`i'=3
}
else if (Pu`i'>Pd`i') & (Pd`i'>Pl`i') {
replace rPd`i'=1
replace rPl`i'=3
replace rPu`i'=2
}
else if (Pu`i'>Pl`i') & (Pl`i'>Pd`i') {
replace rPd`i'=1
replace rPl`i'=2
replace rPu`i'=3
}
}
collapse (sum)rPd1 rPl1 rPu1 (sum)rPd1 rPl1 rPu1 (sum)rPd1 rPl1 rPu1
(mean)death if (ngrp>2), by(grpid)
gen borda1= ((rPd1>rPl1) & (rPd1>rPu1))
gen borda2= ((rPd2>rPl2) & (rPd2>rPu2))
gen borda3= ((rPd3>rPl3) & (rPd3>rPu3))
gen borda1s:"Borda Count/Prob 1 Success" = (death==borda1)
tab borda1s, miss



**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.

This footnote also confirms that this email message has been swept for the presence of computer viruses.

**********************************************************************

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index