Portfolios/Gruppen aus Ranglisten erstellen

Allgemeine Fragen rund um Statistik mit Stata.

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon daniel » Mo 20. Mai 2013, 21:03

Also entschuldige, aber ich komme nicht ganz mit, und Du wiederhost die Fehler, die ich bereits angemerkt habe.

Code: Alles auswählen
quietly levelsof ISIN ,l(isin)



Was ist ISIN? Wo wird das erstellt?

Auch vor der letzten Schleife war er das nicht..


Die letzte Schleife wird den Fehler r(133) erzeugen, weil Du (erneut) versuchst die nicht exisiterende Funktion -mean()- mit -replace- zu verwenden.

Dein letzter Vorschlag kann nicht funktionieren, weil Du -generate- in einer Schleife verwendest. Nach dem ersten Durchlauf existieren die Variablen aber bereits, sodass sie nicht erneut erstellzt werden können.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon Emolchie » Mo 20. Mai 2013, 23:52

Ja habe den Code nochmals etwas verändert, so dass er jetzt zwar läuft. Aber es dauert ewig von dem her weiß ich nicht, ob ich in einer endlosschleife feststecke :((

Der Code lautet jetzt

Code: Alles auswählen
cd c:/users/nugget/desktop/julia/bachelorarbeit/datenrichtig

use alles_Rang_1

generate P_rendite = (P[_n]-P[_n-1])/P[_n-1] if _n>1
generate ssli = 0
generate ssmi = 0
generate sshi = 0
generate msli = 0
generate msmi = 0
generate mshi = 0
generate lsli = 0
generate lsmi = 0
generate lshi = 0

quietly levelsof ISIN ,l(isin)
foreach z of loc isin {

quietly levelsof Jahr ,l(yrs)
foreach y of loc yrs {
    foreach x in rang size {
        _pctile `x'  if (Jahr == `y') ,p(40 60)
        forv j = 1/2 {
            loc p`j'_`x' = r(r`j')
        }
   }
replace ssli = 1 if (size <= `p1_size') & (rang <= `p1_rang')
replace ssmi = 1 if (size <= `p1_size') & (rang > `p1_rang') & (rang <= `p2_rang')
replace sshi = 1 if (size <= `p1_size') & (rang > `p2_rang')
replace msli = 1 if (size > `p1_size') & (size <= `p2_size') & (rang <= `p1_rang')
replace msmi = 1 if (size > `p1_size') & (size <= `p2_size') & (rang > `p1_rang')
replace mshi = 1 if (size > `p1_size') & (size <= `p2_size') & (rang > `p2_rang')
replace lsli = 1 if (size > `p2_size') & (rang <= `p1_rang')
replace lsmi = 1 if (size > `p2_size') & (rang > `p1_rang') & (rang <= `p2_rang')
replace lshi = 1 if (size > `p2_size') & (rang > `p2_rang')
   }

}


Falls du dich erinnerst, vor nicht all zu langer Zeit habe ich bereits einen Thread hier eröffnet. Das ist immer noch der gleiche Datensatz im Paneldatenformat mit mehreren Unternehmen (identifiziert durch eine Nummer: ISIN) und bestimmten Kennzahlen für diese Unternehmen von 1980-2010.
Emolchie
 
Beiträge: 21
Registriert: Mi 24. Apr 2013, 18:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon daniel » Di 21. Mai 2013, 00:52

Aber es dauert ewig von dem her weiß ich nicht, ob ich in einer endlosschleife feststecke :((


Vermutlich lässt sich der code beschleunigen, allerdings müsste ich um dazu mehr zu sagen viel tiefer im Thema sein, und diese Zeit habe ich nicht. Es scheint aber, als sei der loop über alle Firmen völlig überflüssig, da innerhalb der Schleifen niemals Bezug auf z (das local der äußersten Schleife) genommen wird. Zudem werden die Variablen für die Quantile immer wieder mit ein und der selben zahl ersetzt (mit 1). Diese Punkte zusammengenommen würde ich sagen, dass Du mit dem derzeitigen Durchlauf Deine Zeit verschwendest.

Aber mit -foreach- kann man keine Endlosschleife erzeugen, das kann ich mit sicherheit sagen.

Falls du dich erinnerst,


Sorry, bestenfalls dunkel. Ich schreibe die Foreneinträge nur nebenbei, und 99 Prozent meiner Aufmerksamkeit sind woanders.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon Emolchie » Di 21. Mai 2013, 01:04

Ok hab es abgebrochen und werde dann morgen mal die äußerste Schleife wieder entfernen und das ganze nochmal versuchen..
Emolchie
 
Beiträge: 21
Registriert: Mi 24. Apr 2013, 18:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon Emolchie » Di 21. Mai 2013, 15:29

Funktioniert leider immer noch nicht :(

Zudem werden die Variablen für die Quantile immer wieder mit ein und der selben zahl ersetzt (mit 1).

Wie meinst du das?
Also ich habe Unternehmen. Diese weisen für jedes Jahr einen Rang für einen bereits berechneten Index ("rang") und einen Rang für ihre Größe ("size") auf.
Nun möchte ich "rang" und "size" für jedes Jahr in die unteren 40%, die mittleren 20% und die oberen 40% einteilen.
Anschließend bilde ich Portfolios aus den Kombinationen der Intervalle von "rang" und "size". Für beide habe ich 3 Ausprägungen -> 3*3 = 9 -> 9 Portfolios.
Um zu wissen, in welches Portfolio ein Unternehmen für ein Jahr eingeteilt wird, möchte ich die Portfolios quasi als Dummy-Variable gestalten.
Ist ein Unternehmen für ein bestimmtes Jahr in ein bestimmtes Portfolio eingeteilt, so soll dort eine 1 stehen.
Daher setze ich auch alles gleich 1.
Emolchie
 
Beiträge: 21
Registriert: Mi 24. Apr 2013, 18:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon daniel » Di 21. Mai 2013, 17:19

Wie meinst du das?


Naja, Du schreibst

Code: Alles auswählen
cd c:/users/nugget/desktop/julia/bachelorarbeit/datenrichtig

use alles_Rang_1

[...]

quietly levelsof ISIN ,l(isin)
foreach z of loc isin {

quietly levelsof Jahr ,l(yrs)
foreach y of loc yrs {

[...]

replace ssli = 1 if (size <= `p1_size') & (rang <= `p1_rang')
[...]
replace lshi = 1 if (size > `p2_size') & (rang > `p2_rang')
   }

}



Was bedeutet, dass ssli und lshi (und alle weiteren Variablen, die ich hier aus Platzgründen rausgelassen habe) für jede Firme, für jedes Jahr immer wieder mit 1 ersetzt werden, wenn die Bedingung zutrifft. Da aber die Bedingung aber sowohl unabhängig von der jeweiligen Firma, als auch (und das ist viel schlimmer) unabhängig vomn jeweiligen Jahr ist, ist das nicht sinnvoll.

Also ich habe Unternehmen. Diese weisen für jedes Jahr einen Rang für einen bereits berechneten Index ("rang") und einen Rang für ihre Größe ("size") auf.
Nun möchte ich "rang" und "size" für jedes Jahr in die unteren 40%, die mittleren 20% und die oberen 40% einteilen.
Anschließend bilde ich Portfolios aus den Kombinationen der Intervalle von "rang" und "size". Für beide habe ich 3 Ausprägungen -> 3*3 = 9 -> 9 Portfolios.


Und wo kommen da nun die Renditen ins Spiel. Sorry, aber Du veränderst Dein Problem von post zu post. Letzter Versuch meinerseits

Code: Alles auswählen
// create _one_ variable to indicate portfolio (1-9)
g foo = .

// create portfolio for each year
qui levelsof year ,l(yr)
foreach y of loc yr {

   // get lo mi and hi percentile condition for rang and size for the current year
   foreach x in rang size {
      _pctile `x' if (year == `y') ,p(40 60)
      loc `x'lo (`x' <= `r(r1)')
      loc `x'mi inrange(`x', `r(r1)', `r(r2)')
      loc `x'hi (`x' > `r(r2)')
   }
   
   // now fill in the variable with values 1 to 9 for the current year
   loc i 0
   foreach x in lo mi hi {
      foreach z in lo mi hi {
         qui replace foo = `++i' if `rang`x'' & `size`z'' ///
         & (year == `y')
      }
   }
}

// create indicator variables (foo1-foo9) for each portfolio
ta foo ,g(foo)
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon Emolchie » Di 21. Mai 2013, 18:23

Da aber die Bedingung aber sowohl unabhängig von der jeweiligen Firma, als auch (und das ist viel schlimmer) unabhängig vomn jeweiligen Jahr ist, ist das nicht sinnvoll.

Richtig. Oh man danke für diese Anmerkung :-) Habe daraufhin meinen Code um eben diese Bedingung modifiziert und es scheint zu funktionieren. Also von außen sieht es zumindest richtig aus, alles nachrechnen kann ich natürlich nicht.

Code: Alles auswählen
cd c:/users/nugget/desktop/julia/bachelorarbeit/datenrichtig

use alles_Rang_1

generate P_rendite = (P[_n]-P[_n-1])/P[_n-1] if _n>1
generate ssli = 0
generate ssmi = 0
generate sshi = 0
generate msli = 0
generate msmi = 0
generate mshi = 0
generate lsli = 0
generate lsmi = 0
generate lshi = 0


quietly levelsof Jahr ,l(yrs)
foreach y of loc yrs {
    foreach x in rang size {
        _pctile `x'  if (Jahr == `y') ,p(40 60)
        forv j = 1/2 {
            loc p`j'_`x' = r(r`j')
        }
   }
replace ssli = 1 if (Jahr == `y') & (size <= `p1_size') & (rang <= `p1_rang')
replace ssmi = 1 if (Jahr == `y') & (size <= `p1_size') & (rang > `p1_rang') & (rang <= `p2_rang')
replace sshi = 1 if (Jahr == `y') & (size <= `p1_size') & (rang > `p2_rang')
replace msli = 1 if (Jahr == `y') & (size > `p1_size') & (size <= `p2_size') & (rang <= `p1_rang')
replace msmi = 1 if (Jahr == `y') & (size > `p1_size') & (size <= `p2_size') & (rang > `p1_rang')
replace mshi = 1 if (Jahr == `y') & (size > `p1_size') & (size <= `p2_size') & (rang > `p2_rang')
replace lsli = 1 if (Jahr == `y') & (size > `p2_size') & (rang <= `p1_rang')
replace lsmi = 1 if (Jahr == `y') & (size > `p2_size') & (rang > `p1_rang') & (rang <= `p2_rang')
replace lshi = 1 if (Jahr == `y') & (size > `p2_size') & (rang > `p2_rang')
   }


Bei dem Code von deinem letzten Post kommt als Fehlermeldung "lo not found" r111... Aber mein "modifizierter" Code müsste ja eigentlich richtig sein oder?
Achso ja und es stimmt, ich habe meine Fragen etwas verwirrend formuliert, weil ich erst im Nachhinein darauf gekommen bin, erst die Unternehmen in die Portfolios einzuteilen und danach für die Portfolios die monatliche Rendite zu berechnen.
Emolchie
 
Beiträge: 21
Registriert: Mi 24. Apr 2013, 18:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon daniel » Di 21. Mai 2013, 18:43

Bei dem Code von deinem letzten Post kommt als Fehlermeldung "lo not found" r111...


Kann den fehler zwar auf Anhieb nicht finden, aber möglich ist das. Der logische Aufbau sollte allerdings funktionieren. Dein code vermutlich ebenfalls.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Portfolios/Gruppen aus Ranglisten erstellen

Beitragvon Emolchie » Di 21. Mai 2013, 19:10

Ok einer der jetzt funktioniert reicht ja :-)
Danke warst mir ne große Hilfe :-)
Emolchie
 
Beiträge: 21
Registriert: Mi 24. Apr 2013, 18:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Vorherige

Zurück zu Statistik allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

cron