寻找置信区间

时间:2019-08-14 15:38:55

标签: r probability standard-error

我正在做一些作业,这是一个问题:

创建仅包含于2016年6月(“ 2016-06-01”及更高版本的结束时间)结束的英国退欧民意调查的数据框june_polls。我们将计算所有民意测验的置信区间,并确定有多少个测验覆盖了d的真实值。

首先,我使用dplyr::mutate为每个民意测验的估计SE ^ [X]的标准误差(给定样本大小和X ^(x_hat)的值)计算插件估计se_x_hat。其次,在给定se_x_hat值的情况下,再次使用dplyr::mutate计算每个轮询的扩展标准误差的估计值。然后,第三次使用dplyr::mutate,以计算价差的95%置信区间的上限和下限。最后,添加一列命中,以指示每个民意测验的置信区间是否覆盖正确的扩展d = -0.038。

下面是我已经尝试过的代码。

library(dslabs)
library(dplyr)
data(brexit_polls)

brexit_polls <- brexit_polls %>%
  mutate(x_hat = (spread + 1)/2)

p <- 0.481

june_polls <- brexit_polls %>% filter(enddate >= as.Date("2016-06-01")) %>%
  mutate(se_x_hat = sqrt((x_hat*(1-x_hat))/samplesize)) %>% 
  mutate(se_spread = 2*se_x_hat) %>% 
  mutate(lower_spread = x_hat - qnorm(0.975)*se_spread) %>%
  mutate(upper_spread = x_hat + qnorm(0.975)*se_spread) 

mutate(june_polls, hit = between(0.495, lower_spread, upper_spread))

这是我收到的错误:Error: Expecting a single value: [extent=32]

我还认为我可能在代码中计算出错误,因为我的上下置信区间的所有值在不应该为正时都是正的。

1 个答案:

答案 0 :(得分:0)

我不是100%地确定您要做什么,或者“覆盖正确的价差d = -0.038”是什么意思,但是如果您只是想看看p是否包含在95%的置信区间内您的伯努利分布中,您可以使用:

june_polls <- brexit_polls %>% filter(enddate >= as.Date("2016-06-01")) %>%
  mutate(se_x_hat = sqrt((x_hat*(1-x_hat))/samplesize)) %>% 
  mutate(se_spread = 2*se_x_hat) %>% 
  mutate(lower_spread = x_hat - qnorm(0.975)*se_spread) %>%
  mutate(upper_spread = x_hat + qnorm(0.975)*se_spread) %>%
  mutate(hit = ifelse(p > lower_spread & p < upper_spread, TRUE, FALSE))