合并估计-带broom和tidyverse的回归模型

合并估计-带broom和tidyverse的回归模型,r,regression,spss,broom,R,Regression,Spss,Broom,我正在与一个团队合作,一些人正在使用SPSS替换缺失病例(多重插补),然后分析数据。当SPSS输入新值时,它会报告每个数据集结果和一个汇总结果,这与所有结果的平均值不同 现在,我使用R来处理这个在SPSS上创建的“多重插补数据集”。我正试图以SPSS报告的相同方式从回归中获得汇总估计值。感谢这篇文章,我可以使用broom软件包运行几个回归模型并显示每个估计。问题在于:有些统计数据是完全不同的。例如,使用扫帚时的t值高于SPSS报告的值。 请看一下这个SPSS输出 为了简化这项工作,假设我想对每

我正在与一个团队合作,一些人正在使用SPSS替换缺失病例(多重插补),然后分析数据。当SPSS输入新值时,它会报告每个数据集结果和一个汇总结果,这与所有结果的平均值不同

现在,我使用R来处理这个在SPSS上创建的“多重插补数据集”。我正试图以SPSS报告的相同方式从回归中获得汇总估计值。感谢这篇文章,我可以使用broom软件包运行几个回归模型并显示每个估计。问题在于:有些统计数据是完全不同的。例如,使用扫帚时的t值高于SPSS报告的值。 请看一下这个SPSS输出

为了简化这项工作,假设我想对每个星星上的价格进行回归,然后显示一行汇总估计值(t检验结果和p值)

代码:

库(扫帚)
d%
do(型号=lm(价格~星级,数据=))
已安装的\u型号%>%整齐(型号)
已安装的\u型号%>%浏览(型号)
如果您想更好地了解SPSS正在做什么,请检查此实际输出。合并的结果并不是所有结果的平均值。

请尽管说这个问题无关紧要,但不要否定这篇文章。其他人可能会有相同的问题,我会提供所有代码,让您再次运行分析


非常感谢

我不是100%确定您所说的“合并”估算是什么意思——这是否仅仅意味着您希望在不分组的情况下运行模型

如果是这样,那么这应该是你想要的

d <- data.frame(group=rep(1:5, each = 20),
                price=rnorm(100,1000,10),
                stars=rnorm(100,3,1)
               )

fitted_models <- 
    d %>% 
        group_by(group) %>% 
        do(tidy(lm(data=., formula=price ~ stars))) %>%
        ungroup %>%
        mutate(group=group %>% as.character)


pooled_model <-
    d %>%
    do(tidy(lm(data=., formula=price ~ stars))) %>%
    mutate(group='pooled')

all_results <- bind_rows(fitted_models, pooled_model) %>% select(group, everything())

all_results
d%
do(整洁(lm(数据=,公式=价格~星星))%>%
解组%>%
变异(组=组%>%as.character)
合并的_模型%
do(整洁(lm(数据=,公式=价格~星星))%>%
突变(group='pooled')
所有结果%select(组,所有内容())
所有结果

谢谢,@curt-f,但是这个脚本高估了统计数据和p.value。在真实的数据集中,每个模型都有一个“t统计量”,如9,但合并模型有42。我不知道如何解决这个问题。你…吗?谢谢你能用一个公式或方程式来编辑你的问题吗?亲爱的,@curt-f,我会编辑这个问题。但是,不幸的是,我不知道SPSS是如何得出这个结果的。我不认为在你能更好地指定你想要的是什么之前,你会在你的R代码上得到帮助​ 希望它这样做。好的,@curt-f,我将再次编辑初始文本。谢谢。我想你有两个问题不属于一起。第一个问题是,“当SPSS计算“汇总”结果时,它在做什么?”这是交叉验证的问题,而不是堆栈溢出的问题。第二个问题是“如何在R中执行XYZ”?这可能是一个问题,取决于XYZ到底是什么。你是对的,@CurtF。我把两个问题合并成一个问题,也许这不是最好的主意。
d <- data.frame(group=rep(1:5, each = 20),
                price=rnorm(100,1000,10),
                stars=rnorm(100,3,1)
               )

fitted_models <- 
    d %>% 
        group_by(group) %>% 
        do(tidy(lm(data=., formula=price ~ stars))) %>%
        ungroup %>%
        mutate(group=group %>% as.character)


pooled_model <-
    d %>%
    do(tidy(lm(data=., formula=price ~ stars))) %>%
    mutate(group='pooled')

all_results <- bind_rows(fitted_models, pooled_model) %>% select(group, everything())

all_results