循环从回归构造协方差矩阵

埃鲁伊斯

我正在尝试构造一个协方差矩阵,我认为必须使用循环来完成。

我有30个针对单个索引(DowJones)的回归,该索引创建了一个具有截距(alpha),斜率(beta_i)和残差的标准偏差(epsilon)的表。我特别需要构造一个矩阵σij = βi* βj* σ^2m,其中βi, βj, etc是该表的斜率,σ^2m是方差变量dji_var因此,first slope * first slope * dji_var 填充协方差矩阵的第一个元素。

有没有人可以轻松地为我做到这一点的循环?我的协方差矩阵的尺寸应为30x30。

谢谢

这是我到目前为止所拥有的:

############# Regressing each company’s returns onto the index return #########
#lm(AAPL~DJI), lm(AXP~DJI), lm(BA~DJI), lm(CAT~DJI), lm(CSCO~DJI), lm(CVX~DJI), lm(DD~DJI), lm(DIS~DJI),
#lm(GE~DJI),lm(GS~DJI),lm(HD~DJI),lm(IBM~DJI),lm(INTC~DJI), lm(JNJ~DJI), lm(JPM~DJI), lm(KO~DJI),   
#lm(MCD~DJI), lm(MMM~DJI), lm(MRK~DJI), lm(MSFT~DJI), lm(NKE~DJI), lm(PFE~DJI), lm(PG~DJI), lm(TRV~DJI),
#lm(UNH~DJI),lm(UTX~DJI),lm(V~DJI),lm(VZ~DJI),lm(WMT~DJI), lm(XOM~DJI)

resultdf <- data.frame(matrix(NA,0,4), stringsAsFactors = FALSE)
names(resultdf) <- c("Asset", "Intercept", "Slope", "Std_of_Residuals")
i <-1
for (i in 1:30){
  regression_company_dji <- lm(timeseriesreturns[,i] ~ dji[,1])
  resultdf <- rbind(resultdf, data.frame(Asset= i,
                                         Intercept = regression_company_dji$coefficients[[1]],
                                         Slope= regression_company_dji$coefficients[[2]],
                                         Std_of_Residuals = sd(resid(regression_company_dji)) 
  ))
  #i <- i +1    #DO WE REALLY NEED THIS LINE
}
#prints a table of intercepts, slopes (βi), and idiosyncratic standard deviations σRi (standard deviation of the residuals) 
head(resultdf)
# Asset   Intercept     Slope Std_of_Residuals
#1     1  0.02676350 1.1387824        1.2474725
#2     2 -0.07187497 0.8535259        1.1008612
#3     3  0.06966935 1.0196946        0.9490182
#4     4 -0.12898852 1.0635297        1.2044883
#5     5  0.07498498 1.0600683        0.9935900
#6     6 -0.10309059 1.1483061        1.2779884

#ASSET 1 STARTS WITH AAPL, THEN GOES AXP, BA, CAT, ETC.
#WE HAVE A TABLE OF INTERCEPTS, SLOPES AND STANDARD DEVIATIONS OF RESIDUALS FOR EACH REGRESSION BETWEEN COMPANY RETURNS AND INDEX RETURN

############## Variance of DowJones Index return ######################
dji_var <- var(dji[,1])
#0.8873133
  
######### SINGLE INDEX APPROXIMATION #################################
# In Single-Index Model:
# Intercept = alpha_i
# Slope = beta_i
# Std_of_Residuals = sigma_Ri

# This equation is referred to as the single-index model,
#                   rit = αi + βirmt + εit                                            (8.1)
# αi and βi are the intercept and slope coefficients that result from:
# regressing the rate of return from asset i in period t, denoted rit, onto 
# the simultaneous rate of return on some market index in period t, denoted rmt; and 
# εit is the unexplained residual error term for asset i in period t. 
#########################################################################################
#the Covariance Matrix between two different securities i and j can be expressed as:
# σij = βi* βj* σ^2m.

sigma_squared_market <- dji_var
# [1] 0.8873133

dput(resultdf)

structure(list(Asset = 1:30, Intercept = c(0.0267635033349584, 
-0.0718749662550324, 0.069669346056576, -0.128988516445594, 0.0749849799579864, 
-0.103090590571032, -0.0181204083787094, 0.0940216340701365, 
0.0601045129621876, -0.00712297315161099, 0.100323562649478, 
-0.0517406457596374, 0.012599051698687, -0.0218711039493553, 
0.0263255529821284, 0.0197321609378249, 0.08018398886968, 0.0115659025410572, 
-0.0207922446090187, 0.0629952677099163, 0.137484116508374, 0.0620066345319251, 
-0.0416494718503931, 0.0482722555478251, 0.0886134357472885, 
-0.0240313203975499, 0.142979385201501, -0.0193601624887868, 
-0.107001092634366, -0.0592959645858059), Slope = c(1.13878236093664, 
0.853525869839225, 1.01969460976746, 1.06352969847768, 1.06006825519905, 
1.14830613937928, 1.02057992982579, 0.917124514708528, 1.06521921561495, 
1.16527602124266, 1.01554236848894, 1.05028610720528, 0.99954945490449, 
0.854040163442602, 1.20416480868948, 0.662824098888303, 0.930011492883117, 
0.963949283094558, 0.953009111832057, 1.24362084628936, 0.982034757703831, 
0.885675351438922, 0.766292851924153, 0.873619973887616, 1.03103698221555, 
0.977088962832525, 1.11842324882864, 0.748745167476966, 0.77506736508709, 
1.05126852549869), Std_of_Residuals = c(1.24747249150145, 1.10086122769927, 
0.949018244224872, 1.20448829818015, 0.99358998832754, 1.2779884149182, 
1.13129109038816, 1.03393869712944, 0.999480572360969, 0.690970159142872, 
0.783262244296981, 0.868512560468288, 1.28324642163822, 0.656011164082018, 
0.717972392581603, 0.6617871220526, 0.901244987788103, 0.60700558064988, 
1.02292450298541, 1.34320098732505, 0.961307330185487, 0.815493628199713, 
0.650600876764784, 0.655802004867679, 1.1807969036117, 0.835687577257354, 
1.02888260605468, 0.721618425329537, 1.08066991592903, 0.955080491660557
)), row.names = c(NA, -30L), class = "data.frame")

德迈尔

我们可以得到向量resultdf$Slope本身的外积,其中

数组X和Y的外积是尺寸为c(dim(X),dim(Y))的数组A,其中元素A [c(arrayindex.x,arrayindex.y)] = FUN(X [arrayindex.x ],Y [arrayindex.y],...)。

(来自help("outer"))。在这里,我们特别关注的乘法功能FUN,但是您可能会想起自己将来的参考,注意到R命令outer()也可以处理其他功能。然后,我们只需要将每个元素乘以即可dji_var然后是完整的解决方案

covmat <- dji_var * outer(resultdf$Slope, resultdf$Slope, FUN = "*")

要按预期工作,请考虑前几行和几列:

covmat[1:3, 1:3]
#          [,1]      [,2]      [,3]
# [1,] 1.150690 0.8624510 1.0303573
# [2,] 0.862451 0.6464134 0.7722605
# [3,] 1.030357 0.7722605 0.9226080

您可以轻松确认是否符合预期。

更新资料

如果您需要在对角线上添加一个项(例如,进行正则化或其他类型的附加噪声),则只需

covmat <- dji_var * outer(resultdf$Slope, resultdf$Slope, FUN = "*")
covmat <- covmat + diag(pi, nrow = nrow(covmat))
covmat[1:3, 1:3]
#          [,1]      [,2]      [,3]
# [1,] 4.292283 0.8624510 1.0303573
# [2,] 0.862451 3.7880061 0.7722605
# [3,] 1.030357 0.7722605 4.0642007

(在这里,我用它pi作为常数,但也可以是常数。如果您需要将对角线添加项作为不同元素的向量,也可以这样做:

covmat <- dji_var * outer(resultdf$Slope, resultdf$Slope, FUN = "*")
covmat <- covmat + diag(resultdf$Std_of_Residuals^2, nrow = nrow(covmat))
covmat[1:3, 1:3]
#          [,1]      [,2]      [,3]
# [1,] 2.706878 0.8624510 1.0303573
# [2,] 0.862451 1.8583089 0.7722605
# [3,] 1.030357 0.7722605 1.8232437

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

椭圆的协方差矩阵

来自分类Dev

相关协方差矩阵到方差协方差矩阵

来自分类Dev

协方差矩阵不是正定的

来自分类Dev

旋转后的协方差矩阵

来自分类Dev

R中的方差-协方差矩阵

来自分类Dev

给定协方差矩阵和拟合系数,如何计算线性回归的p值

来自分类Dev

从相关矩阵生成协方差矩阵

来自分类Dev

如何使用for循环更新协方差矩阵中的对角线?

来自分类Dev

如何使用相关性或协方差矩阵而不是使用R的数据框获得回归系数和模型拟合?

来自分类Dev

协方差矩阵lm对象R

来自分类Dev

Python:从列表创建协方差矩阵

来自分类Dev

使用VBA的Variace协方差矩阵

来自分类Dev

numpy polyfit-协方差矩阵

来自分类Dev

在Python中建立协方差矩阵

来自分类Dev

numpy中的加权协方差矩阵

来自分类Dev

EmguCV:如何从图像创建协方差矩阵?

来自分类Dev

Python:手动协方差矩阵

来自分类Dev

在R中建立协方差矩阵

来自分类Dev

从lavaan中提取误差协方差矩阵

来自分类Dev

不使用numpy计算协方差矩阵

来自分类Dev

从lavaan中提取误差协方差矩阵

来自分类Dev

Matlab:协方差矩阵错误结果

来自分类Dev

Python:手动协方差矩阵

来自分类Dev

numpy polyfit-协方差矩阵

来自分类Dev

NUMPY:嵌套列表的协方差矩阵

来自分类Dev

Python:从列表创建协方差矩阵

来自分类Dev

如何计算块中的协方差矩阵?

来自分类Dev

将数据显示为协方差矩阵

来自分类Dev

从出现列表计算协方差矩阵