R:如何在glm或lm中传入对变量的引用?

时间:2016-03-07 01:45:52

标签: r formula glm lm

所以,让我说我有一个命名向量:

sorted = c(1,2,3)
names(sorted) = c("A","B","C")

它看起来如下:

> sorted
A    B    C
1    2    3

所以这是一个名为A,B,C的向量,分别具有值1,2,3。

我也有一个样本数据:

data.ex = as.data.frame(matrix(rep(c(1,2,3,4),3), nrow = 3, ncol = 3))
colnames(data.ex) = c("A","B","C")

所以这个数据框有3列,名为A,B,C。

我想仅使用glm()中的A值来预测C:

fit.ex = glm(formula = C ~ names(sorted)[2],
         data = data.ex,
         family = binomial(link = "logit"))

然后,我将继续收到以下错误消息:

Error in model.frame.default(formula = C ~ names(sorted)[2], data = data.ex,: 
variable lengths differ (found for 'names(sorted)[2]')

我在这里阅读这篇文章并找到了as.name()函数,但仍然无效: http://www.ats.ucla.edu/stat/r/pages/looping_strings.htm

我找不到任何与我的问题类似的东西。 拜托,如果有另一个线程解决这个问题,请指导我! 或任何形式的帮助非常感谢! :)

1 个答案:

答案 0 :(得分:0)

根据评论提供答案:

sorted = c(A=1,B=2,C=3)
names(sorted) = c("A","B","C")
data.ex = data.frame(A=1:4,B=2:5,C=c(1,0,0,1))

构建公式列表:

forms <- lapply(names(sorted)[1:2],reformulate,response="C")
models <- lapply(forms,glm,data = data.ex,
                 family = binomial(link = "logit"))

然后你可以做像

这样的事情
t(sapply(models,coef))

plyr包对于这类事情也很方便(例如plyr::ldply(models,coef)