Für meine Abschlussarbeit führe ich eine lineare Regressionsnalyse durch. Dazu soll ich auf Wunsch meines Betreuers sukzessive Variablen dem Modell hinzufügen (bottom up-) oder entfernen (top-down). Ich möchte analysieren, wie sich die Signifikanzen der exogenen (unahängigen) Variablen dabei ändern.
Nun habe ich mehrere Probleme:
1)Mein erster Ansatz war es, die step()-Funktion zu nutzen. Einmal mit direction="backward" (top-down) oder eben direction="forward" (Bottom up)
So. Folgende Probleme:
1.1) ich komme nicht an die Zwischenschritte heran, sondern nur an das lezte Modell welches mit die step()-Funktion ausspuckt. Gibt es eine Funktion, um an die zwischenschritte ranzukommen?
1.2) die step()-Funktion überspringt manche Variable... ganz extrem ist das bei backward....
1.2.1. warum? wie "tickt" die step()-Funktion überhaupt?
1.2.2. wie kann ich das unterbinden?
Daher habe ich veruscht, dem Modell manuell Variable hinzufügen oder zu entfernen. Umgesetzt habe ich dies mit einer for-Schleife und der Funktion udate
ABER:
2) auch hier: er überspringt manche Variable, ganz extrem bei "backward", also bei (update~-X)
Ich möchte einfach nur automatisiert Modelle mit allen J exogenen Variablen, die ich so untersuchen möchte, bilden:
Model1=Y~X1
Model2=Y~X1+X2
...
ModelJ=Y+X1+X2...+XJ
und jeweils die summary() ausgeben lassen um eben die Signifikanzen, Bestimmtheitsmasse etc. zu analysieren....
Erster Ansatz:
Code: Alles auswählen
#Modellbildung step backward
backward=step(lm(Y~X1+X2+X3+X4+X5+X6+X7+X8+X9+X10+X11+X12+X13+X14+X15+X16+X17+X18+X19+X20+X21+X22+X23+X24+X25+X26+X27+X28+X29+X30+X31+X32+X33+X34+X35+X36+X37+X38+X39+X40+X41+X42+X43+X44+X45), direction="backward")
#Modellbildung step forward
forward=step(lm(Y~1), scope=~X1+X2+X3+X4+X5+X6+X7+X8+X9+X10+X11+X12+X13+X14+X15+X16+X17+X18+X19+X20+X21+X22+X23+X24+X25+X26+X27+X28+X29+X30+X31+X32+X33+X34+X35+X36+X37+X38+X39+X40+X41+X42+X43+X44+X45, direction = "forward")
lmOut(backward, file = "Pfadv")
lmOut(forward, file = "Pfad")
Code: Alles auswählen
#Modellbildung Top Down
modelnametd="modeltd"
modeltd=lm(Y~X1)
for(r in 2: J)
{
modeltd=update(modeltd, paste0(".~.+X",r)) #Modellbildung mt allen vorhandenen exogenen Variablen als Ausgangsmodell
}
lmOut(modeltd, file="Pfad")
Ergebnistd[2,1]=modelnametd
Ergebnistd[2,2]=summary(modeltd)$r.squared #Bestimmtheitsmass des jeweiligen Modells in Ergebnistabelle ablegen
Ergebnistd[2,3]=summary(modeltd)$adj.r.squared #korrigiertes Bestimmtheitsmass
Ergebnistd[2,4]=summary(modeltd)$fstatistic[1] #F-Wert
Ergebnistd[2,5]=summary(modeltd)$fstatistic[2] #numdf
Ergebnistd[2,6]=summary(modeltd)$fstatistic[3] #dendf
k=J
modelname="modeltd"
q=3 #Zeile in Ergebnismatrix
while(k >1) #innere Schleife
{
modeltdn=modeltd
modelname = paste(modelname, k ,sep="-")
modeltdn=update(modeltdn, paste0(".~.-X",k)) #Schrittweises entfernen von exogenen Variablen
assign(modelname,modeltd)
Ergebnistd[q,1]=modelname
Ergebnistd[q,2]=summary(modeltdn)$r.squared #Bestimmtheitsmass des jeweiligen Modells in Ergebnistabelle ablegen
Ergebnistd[q,3]=summary(modeltdn)$adj.r.squared #korrigiertes Bestimmtheitsmass
Ergebnistd[q,4]=summary(modeltdn)$fstatistic[1] #F-Wert
Ergebnistd[q,5]=summary(modeltdn)$fstatistic[2] #numdf
Ergebnistd[q,6]=summary(modeltdn)$fstatistic[3] #dendf
filenametd=paste(k-1,"TD.csv",sep="")
filepathtd="Pfad"
filetd=paste(filepathtd, filenametd, sep="")
lmOut(modeltd, file = filetd)
k=k-1
q=q+1
}
#Modellierung Bottom up
modelnamebu="modelbu"
modelbu=lm(Y~X1) #Ausgansmodell
assign(modelnamebu,modelbu)
Ergebnisbu[2,1]=modelnamebu
Ergebnisbu[2,2]=summary(modelbu)$r.squared #Bestimmtheitsmass des jeweiligen Modells in Ergebnistabelle ablegen
Ergebnisbu[2,3]=summary(modelbu)$adj.r.squared #korrigiertes Bestimmtheitsmass
Ergebnisbu[2,4]=summary(modelbu)$fstatistic[1] #F-Wert
Ergebnisbu[2,5]=summary(modelbu)$fstatistic[2] #numdf
Ergebnisbu[2,6]=summary(modelbu)$fstatistic[3] #dendf
lmOut(modelbu, file = "Pfad")
g=3 #Zeile in Ergebnismatrix
for(k in 2:J) #innere Schleife
{
modelnamebu = paste(modelnamebu, k ,sep="+")
modelbu=update(modelbu, paste0(".~.+X",k))
assign(modelnamebu,modelbu)
Ergebnisbu[g,1]=modelnamebu
Ergebnisbu[g,2]=summary(modelbu)$r.squared #Bestimmtheitsmass des jeweiligen Modells in Ergebnistabelle ablegen
Ergebnisbu[g,3]=summary(modelbu)$adj.r.squared #korrigiertes Bestimmtheitsmass
Ergebnisbu[g,4]=summary(modelbu)$fstatistic[1] #F-Wert
Ergebnisbu[g,5]=summary(modelbu)$fstatistic[2] #numdf
Ergebnisbu[g,6]=summary(modelbu)$fstatistic[3] #dendf
filenamebu=paste(k,"BU.csv",sep="")
filepathbu="Pfad"
filebu=paste(filepathbu, filenamebu, sep="")
lmOut(modelbu, file = filebu)
g=g+1
}
Und ja, es sind wirklich 45 exogene Variablen, effektiv allerdings nur 12, viele sind "ähnlich" bzw. "alternativen", und ich möchte in das finale Modell jeweils nur eine dieser "Alternativen" mit hinein nehmen. Mein Prof möchte aber eben, dass ich eben diesen bottom-up- und top-down-Ansatz verfolge..
Y und smätliche X wurden zuvor aus entsprechenden Dateien ausgelesen.
Vielen Dank im Voraus für etwaige Hilfe,
Gruß