Ich habe ein Problem in der Querschnittsregression in R mit Matrix-Multiplikation gestoßen. Neu bei R, mit begrenzter Erfahrung in der Statistik, war nicht in der Lage, dies selbst zu lösen - so dankbar für jede Hilfe, die ich erhielt.Wie mit nicht invertierbaren Matrix in Multi-Polynom-Regression umgehen
Ich habe eine Regressions-basierte Optimierungsschleife, die Werte zum Zeitpunkt = t mit "Auszahlungen" zum Zeitpunkt = t + 1 vergleicht. Die Auszahlung des Wartens ist auf einen zugrunde liegenden Risikofaktor (Preis) zurückzuführen. Der zugrunde liegende Risikofaktor wird P-mal nach einer geometrischen Brownian-Bewegung mit Drift simuliert. Die Schleife arbeitete vorher mit einer geringen Anzahl von Simulationen, aber die Erhöhung ergab die Fehlermeldung: "System ist rekursiv singuläre reziproke Zustandsnummer = ..." zeigt eine nicht invertierbare Matrix in "solve (t (xRegr)% *% xRegr) ".
Jetzt wird der Wert unter der Anzahl der Polynome reduziert. Gibt es eine Möglichkeit, entweder die Fehlermeldung zu unterdrücken oder "solve (t (xRegr)% *% xRegr)" umzuwandeln, damit es invertiert werden kann?
Darunter befindet sich der relevante Code, wobei Price der Risikofaktor und SimFieldValue der Auszahlungsfaktor ist.
N = 28
T = 28
optlf=5
dt = T/N
P = 10
r = 0.026
Price= rbind(c(41.6,30.9373763595795,50.8510755776967,67.0854095101179,104.179712954895,91.9561846851854),c(41.6,41.7805145277441,45.2969419055361,56.8008034882723,51.2975554233908,43.8111278805107),c(41.6,28.6279098233156,21.3314087035651,20.574518023275,22.2881983556454,27.0795174265799),c(41.6,70.5277614528247,29.1015319937777,13.0548128902815,12.0061278675634,13.847436849188),c(41.6,44.1031493984421,62.8018585243363,74.1503383978682,41.7441715366698,30.3354484800975),c(41.6,28.7893359367633,26.5639692478215,24.4090558179295,19.6337360761389,14.1689925853019),c(41.6,46.7635567574003,43.6112796397418,38.6191344888522,31.303262237689,33.6213863068342),c(41.6,51.3241496798316,68.3366920314959,37.1573417730625,34.102770690666,42.5484782093497),c(41.6,48.3213777179797,61.4781361505889,48.305834062977,68.1538975243411,61.3328587905223),c(41.6,34.8498282688372,40.753543970661,44.6464110373176,55.5927281643198,72.3179127989415))
SimFieldValue <- rbind(c(0,7128335407.56911,7971821838.52472,8651587961.46277,9007256894.82834,9243136993.46264),c(0,854925728.666238,765018125.378897,550667918.037393,259936653.210146,34756846.7971566),c(0,959505369.703509,1189078149.23609,1510702833.82795,1884481820.25987,2253366922.69965),c(0,-1211900723.14149,-1661769489.59836,-1738754072.40814,-1700303902.88583,-1664246782.18987),c(0,855261002.188481,613809686.798442,107392612.580372,-287402679.541545,-406021110.338772),c(0,123468162.851218,184982670.482902,295982085.76078,505275648.315089,855993510.29109),c(0,-455700534.268202,-743722080.996123,-1008645051.81559,-1213852777.3304,-1413018260.61605),c(0,611685292.905561,238454364.070996,-56860035.8420804,-140901579.660916,-283896785.837518),c(0,2237606831.14696,2173010190.17327,2110165358.78933,1967236308.80406,1718366148.13988),c(0,4974291313.63364,5602914436.65997,6219918555.93423,6804461763.11748,7274812957.2393))
V = matrix(nrow=P,ncol=optlf)
V[,ncol(V)] = pmax(SimFieldValue[,optlf+1],0)
V[is.na(V)] <- 0
for (t in (optlf-1):1){
ITM = which(SimFieldValue[,t+1]>0)
x = Price[ITM,t+1]
y = V[ITM,t+1]*exp(-r*dt)
xRegr = cbind(rep(1,length(ITM)),x,x^2,x^3,x^4) #Gjør om senere.
alpha = solve(t(xRegr) %*% xRegr) %*% (t(xRegr) %*% y)
CV = xRegr%*%alpha
ExV = SimFieldValue[ITM,t+1]
OMG[as.logical(max.col(cbind(CV,ExV))-1),t] = 1
V[ITM[as.logical(max.col(cbind(CV,ExV))-1)],t] = SimFieldValue[ITM[as.logical(max.col(cbind(CV,ExV))-1)],t+1]
V[ITM[!as.logical(max.col(cbind(CV,ExV))-1)],t] = V[ITM[!as.logical(max.col(cbind(CV,ExV))-1)],t+1]*(-r)
ifelse(V[,t]==0,V[,t+1],V[,t])*(-r)
}
Ich werde mit allen angeforderten Informationen ergänzen.
Vielen Dank im Voraus!
Ich habe nur eine Zeile (Beispiel) entfernt, wenn dies auftritt. – Koundy
@koundy, entfernt die erste Zeile von SimFieldValue und simPaths - immer noch die gleiche Fehlermeldung. Meinst du etwas anderes? –