我想将每次观察的回归系数与实际变量相乘。如果没有因素,我可以通过将元素矩阵的变量矩阵乘以系数向量来实现。
v_coef <- as.matrix(vars) %*% as.matrix(coef)
但是,我面临的问题是我的变量之一是一个因素。因此,回归返回与虚拟变量关联的多个系数(每年一个,不包括一年)。因此,上面的代码行不再起作用,因为多个系数与变量矩阵中的同一列相关联。
### Working example
# Make up dataframe
df <- data.frame(matrix(rnorm(6*1000, 1, .5), ncol=6))
# Make up some years (3)
df$year <- c(rep(1,333),rep(2,333),rep(3,334))
# Regress something with years as factor
model <- lm(X1~X2+X3+X4+X5+X6+factor(year),data=df)
# This does not work because years receive 3 coefficients for 1 column
m_coef <- as.matrix(df) %*% as.matrix(model$coefficients)
但是,我看到两个解决方案无法弄清楚如何实现它们。要么,我将因子列拆分为几列,除适用年份外,所有年份均为0,当年的观测值则为1。或者,我更改矩阵乘法,然后将系数分配给因子的不同值
答案 0 :(得分:2)
df <- data.frame(matrix(rnorm(6*1000, 1, .5), ncol=6))
year <- c(rep(1,333),rep(2,333),rep(3,334))
df$year1 = ifelse(year == 1, 1, 0)
df$year2 = ifelse(year == 2, 1, 0)
model <- lm(X1~X2+X3+X4+X5+X6+year1+year2,data=df)
m_coef <- as.matrix(df) %*% model$coefficients
为因子级别添加虚拟变量-您不需要指定year3,因为它由case year1 == 0和year2 == 0表示。还可以在矩阵乘法中将as.matrix添加到df。
编辑:对于较大的因素,请使用model.matrix()
dummies = model.matrix(~as.factor(year))[,-1]
第一列是截距,如前所述,截距可以由其他列指定。