分流因素列到R中几列

问题描述 投票:0回答:1

我想乘回归系数与每一观察实际变量。如果没有的因素,我可以通过变量元素的矩阵明智的系数向量乘以做到这一点

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的分裂因素列排成几列秋季当年内的意见。可替换地,我改变矩阵乘法和分配系数的因子的不同值

r tidyr lm elementwise-operations
1个回答
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因为它是由时YEAR1 == 0和YEAR2 == 0,表示还要添加as.matrix在矩阵乘法的df,。

编辑:对于较大的因素使用model.matrix()

dummies = model.matrix(~as.factor(year))[,-1]

第一列是可以因为它是由其他列指定如前所述被忽略截距。

© www.soinside.com 2019 - 2024. All rights reserved.