У меня есть фрейм данных с именем aggregates
, состоящий из числовых столбцов, каждый из которых имеет значительное количество нулевых значений.Я хочу подогнать пробитную модель для каждого столбца, регрессируя их в другой фрейм данных под названием exp_vars
.exp_vars
состоит из факторов, упорядоченных факторов, целых чисел и чисел.Я попробовал это:
probit_reg = lapply(aggregates, function(y) glm(y ~ subset(exp_vars, select=-c(HH_Net_Income)) + log(exp_vars$HH_Net_Income) +
log(exp_vars$HH_Net_Income)^2 + log(exp_vars$HH_Net_Income)^3 , data = cbind(y = y, exp_vars)))
Но я получил эту ошибку:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
Я знаю, что ошибка не связана с формулой, которую я установил, потому что даже с самой основной формулой Iполучить ту же ошибку:
probit_reg=lapply(aggregates, function(y) glm(y ~ exp_vars, data = cbind(y = y, exp_vars)))
Я чувствую, что это как-то связано с тем, что некоторые из моих предикторов являются факторами, но я не знаю, почему это должно быть проблемой и как ее исправить,Должен ли я создавать двоичные переменные для каждого уровня всех моих факторов или есть более простой способ использовать предикторы факторов с glm?
Вот воспроизводимый пример:
aggregates <- data.frame(agg1 =c(1,0,0,0,0), agg2=c(1,1,1,0,1))
exp_vars <- data.frame(exp1 =c(21:25), exp2=c(11,12,21,22,23), exp3=c(1,0,0,1,1))
exp_vars$exp2 = ordered(exp_vars$exp2, levels = c('11','12','21','22','23'))
exp_vars$exp3 = as.factor(exp_vars$exp3)
agg1 agg2
#1 1 1
#2 0 1
#3 0 1
#4 0 0
#5 0 1
# exp1 exp2 exp3
#1 21 11 1
#2 22 12 0
#3 23 21 0
#4 24 22 1
#5 25 23 1
probit_reg=lapply(aggregates , function(y) glm(y ~ exp_vars ,family = binomial(link = "probit"), data = cbind(y = y, exp_vars)))
#Error in model.frame.default(formula = y ~ exp_vars , data = cbind(y = y, exp_vars ), :
invalid type (list) for variable 'exp_vars '