首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何找出因变量的一个子集是否比同一变量的另一个级别在统计上更有意义

如何找出因变量的一个子集是否比同一变量的另一个级别在统计上更有意义
EN

Stack Overflow用户
提问于 2020-09-02 04:33:34
回答 1查看 66关注 0票数 1

我有一个假设:对动车组内部的人来说,对动车组的支持比在动车组之外的人更重要。

变量如下: EMU: 1,在EMU内;0,在EMU外EU_Support: 1,支持;0,不支持

我的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
EB734_May_2010_model_u <- glm(trust ~ D_economy + (Support_EMU*EMU), family = binomial, data = EB734_May_2010)

如果这是测试事物假设的正确方法,有人能帮我吗?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-09-02 05:01:41

我编造了一些假数据来帮助说明这一点。以下是数据和模型:

代码语言:javascript
代码运行次数:0
运行
复制
df <- tibble(
  EMU = sample(c(0,1), 1000, prob=c(.75,.25), replace=TRUE), 
  Support_EMU = sample(c(0,1), 1000, replace=TRUE), 
  z = rnorm(1000), 
  eta = EMU + .25*Support_EMU + 2*Support_EMU*EMU + z, 
  p = plogis(eta), 
  y = rbinom(1000, 1, p)
)

mod <- glm(y ~ EMU*Support_EMU + z, data=df, family=binomial)
summary(mod)

# Call:
#   glm(formula = y ~ EMU * Support_EMU + z, family = binomial, data = df)
# 
# Deviance Residuals: 
#   Min       1Q   Median       3Q      Max  
# -2.7554  -0.9769   0.3717   0.9175   2.3001  
# 
# Coefficients:
#                 Estimate Std. Error z value Pr(>|z|)    
# (Intercept)      -0.0601     0.1115  -0.539  0.58977    
# EMU               1.3788     0.2661   5.183 2.19e-07 ***
# Support_EMU       0.3237     0.1582   2.046  0.04080 *  
# z                 0.9455     0.0878  10.768  < 2e-16 ***
# EMU:Support_EMU   1.4732     0.4897   3.008  0.00263 ** 
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# (Dispersion parameter for binomial family taken to be 1)
# 
# Null deviance: 1344.4  on 999  degrees of freedom
# Residual deviance: 1090.0  on 995  degrees of freedom
# AIC: 1100
# 
# Number of Fisher Scoring iterations: 5

你真正感兴趣的是评估交互的效果。你真的想要上面方程关于预测概率的第二个差。也就是说,您希望(对于E=EMU和S=Support_EMU):

Pr(y=1|E=1,S=1,z) - Pr(y=1|E=1,S=0,z)-Pr(y=1|E=0,S=1,z) -Pr(y=1|E=0,S=0,z)

另一种说法是:

E=1时的S效应- E=0时的S效应

我编写的包中的secondDiff()函数,DAMisc就是这样做的。它使用参数bootstrap来计算效果的置信区间。这样做的一种方法是使用“合理值的边际效应”(MER)方法,其中我们将所有未参与交互作用的变量保持在中位数。这里的结果是:

代码语言:javascript
代码运行次数:0
运行
复制
s1 <- secondDiff(mod, c("EMU", "Support_EMU"), df, method="MER")
summary(s1)
# Second Difference Using the Marginal Effect at Typical Values Approach
# 
# Average Second Difference: 0.087, 95% CI: (-0.019,0.203)

这意味着,平均而言,当EMU为1时,使用MER方法将S从0更改为1的第一个概率差比EMU为0时大0.087。然而,置信区间表明,这在统计上没有显著差异。或者,您可以使用“平均边际效应”(AME)方法。在这里,我们分别计算每个观察值的第二个差异,每个观察值保持所有其他变量在数据集中的观测值。这为我们提供了第二个不同的观察结果。然后,我们将这些第二个差异的平均值作为效果。这就是它看起来的样子。

代码语言:javascript
代码运行次数:0
运行
复制
s2 <- secondDiff(mod, c("EMU", "Support_EMU"), df, method="AME")
summary(s2)

# Second Difference Using the Average Marginal Effect Approach
# 
# Overall: 
#   Average Second Difference: 0.114, 95% CI: (0.005,0.224)
# 
# Individual:
#   Significant Negative Individual Second Differences: 0 
#   Significant Positive Individual Second Differences: 369 
#   Insignificant Individual Second Differences: 631 

这意味着(在所有观察中)平均而言,当EMU=1为.114时,S的影响大于EMU=0时S的影响,根据置信区间,这在统计上是显着的。输出的另一部分表明,在1000秒的差异中,631秒是微不足道的,369秒是显着和积极的。

您可以安装最新版本的DAMisc软件包,方法是先安装remotes软件包,然后执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
remotes::install_github("davidaarmstrong/damisc")

至于AME和MER方法之间的区别,有一篇有趣的文章,主题是Michael Hanmer和Ozan Kalkan写的here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63695081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档