【发布时间】:2019-09-28 15:32:35
【问题描述】:
我有一个包含调查结果的数据框。结果以垂直格式存储。数据框是这样的 -
set.seed(1000)
df = data.frame(RESP_ID=c(rep(1,6),rep(2,8),rep(3,9),rep(4,5),rep(5,4),rep(6,10),rep(7,4),rep(8,8),rep(9,8),rep(10,10)),
CLIENT=c(rep("A",6),rep("A",8),rep("A",9),rep("A",5),rep("A",4),rep("B",10),rep("B",4),rep("B",8),rep("B",8),rep("B",10)),
QST=c(paste0("Q",c(1:6)),paste0("Q",c(1:8)),paste0("Q",c(1:9)),paste0("Q",c(1:5)),paste0("Q",c(1:4)),paste0("Q",c(1:10)),paste0("Q",c(1:4)),paste0("Q",c(1:8)),paste0("Q",c(1:8)),paste0("Q",c(1:10))),
VALUE=round(runif(72,1,4),0))
数据框说明
RESP_ID = 受访者 ID。每个 ID 对应一个受访者。在这个示例数据框中,我们有 10 位受访者。
CLIENT = 接受调查的客户姓名的通讯员。在这个示例数据框中,我们有两个客户端(A 和 B)。
QST = 对应于调查中的问题编号。
VALUE = 对应于问题的答案选项。所有问题都有 4 个答案选项(1 到 4)。
目标
对于每个客户和问题组合,我想创建一个单独的列,用于存储该问题的回归系数,该回归系数在 QST 列中回归到 Q2。
所以在回归模型中,Q2 是因变量,其他所有问题都是自变量。
我的尝试
我的尝试没有给我想要的结果。
slopesdf = df %>%
spread(QST, VALUE, fill = 0) %>%
group_by(CLIENT) %>%
mutate(COEFFICIENT=lm(Q2 ~ .))
我正在尝试首先按CLIENT 和QST 分组,然后找到每个问题的斜率与 Q2 回归。我确信有更好的方法来做到这一点。
目前,我的尝试给了我以下错误消息 -
mutate_impl(.data, dots) 中的错误:评估错误:'.'丹斯拉 公式和参数“数据”
期望的输出
我希望最终数据框包含三列:一列用于 CLIENT,一列用于 QST,第三列称为 COEFFICIENT,其中 CLIENT 和 QST 的每个组合的系数以 Q2 作为响应变量进行回归.
对此的任何帮助将不胜感激。
【问题讨论】:
-
您正在使用
Q2这不是一个列 -
谢谢。您有什么方法可以推荐来获得所需的输出吗?
-
我不清楚你在问什么。
Q2既不是列也不是数值(线性模型的响应变量必须是数值)。QST是一列,但它是分类的,所以它不能是回归中的依赖(响应)变量:我可以想象你想要每个CLIENT的VALUE~QST(这实际上是一个方差分析,因为QST是分类的),但VALUE~Q2没有意义,因为预测变量只有一个值......你能告诉我们一个你想要的特定回归的输出吗?手工完成? -
你能运行这个模型并验证这是你真正想做的吗?这是该数据的正确模型吗?
-
试试
df %>% spread(QST, VALUE, fill = 0) %>% group_by(CLIENT) %>% nest %>% mutate(data = map(data, ~ .x %>% summarise(out = list(lm(Q2 ~ ., data = .x) %>% tidy)))) %>% unnest %>% unnest
标签: r dplyr regression