Разбить столбец фактора на несколько столбцов в R - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу умножить коэффициенты регрессии на фактические переменные для каждого наблюдения.Без факторов я могу сделать это путем умножения матрицы переменных по элементам на вектор коэффициентов

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 для наблюдений, которые попадают в этот год.В качестве альтернативы я меняю матрицу умножения и назначаю коэффициенты разным значениям коэффициента

1 Ответ

0 голосов
/ 07 февраля 2019
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

Добавьте фиктивные переменные для уровней факторов - вам не нужно указывать год3, поскольку он представлен регистром год1 == 0 и год2 == 0. Также добавьте as.matrix для df в умножении матриц.

Редактировать: для более крупных факторов используйте model.matrix ()

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

Первый столбец - это точка пересечения, которую можно игнорировать, поскольку она указана в других столбцах, как указано ранее.

...