我正在做一些作业,这是一个问题:
创建仅包含于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]
。
我还认为我可能在代码中计算出错误,因为我的上下置信区间的所有值在不应该为正时都是正的。
答案 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))