将因子列拆分为 R 中的几列
Split factor column into several columns in R
我想将回归系数与每次观察的实际变量相乘。没有因素,我可以通过将变量矩阵元素明智地乘以系数向量
来做到这一点
v_coef <- as.matrix(vars) %*% as.matrix(coef)
但是,我面临的问题是我的一个变量是一个因素。因此,回归 returns 多个与虚拟变量相关的系数(每年一个,排除一年)。因此,上面的代码行不再起作用,因为几个系数与变量矩阵中的同一列相关联。
### 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。或者,我更改矩阵乘法并将系数分配给因子的不同值
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,因为它由案例 year1 == 0 和 year2 == 0 表示。还要在矩阵乘法中向 df 添加 as.matrix。
编辑:对于更大的因子,使用 model.matrix()
dummies = model.matrix(~as.factor(year))[,-1]
第一列是截距,可以忽略,因为它由前面所述的其他列指定。
我想将回归系数与每次观察的实际变量相乘。没有因素,我可以通过将变量矩阵元素明智地乘以系数向量
来做到这一点v_coef <- as.matrix(vars) %*% as.matrix(coef)
但是,我面临的问题是我的一个变量是一个因素。因此,回归 returns 多个与虚拟变量相关的系数(每年一个,排除一年)。因此,上面的代码行不再起作用,因为几个系数与变量矩阵中的同一列相关联。
### 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。或者,我更改矩阵乘法并将系数分配给因子的不同值
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,因为它由案例 year1 == 0 和 year2 == 0 表示。还要在矩阵乘法中向 df 添加 as.matrix。
编辑:对于更大的因子,使用 model.matrix()
dummies = model.matrix(~as.factor(year))[,-1]
第一列是截距,可以忽略,因为它由前面所述的其他列指定。