如何编写函数来估计置信区间

问题描述 投票:0回答:1

我正在尝试编写一个函数来估计平均值周围的置信区间。 我想通过

wk
或使用
month
作为我的
pd
来估计间隔,但是, 经过一段时间的尝试后,我的所有
var
都得到了 NA,而且该函数还忽略了
wk
并仅由
month
返回。有人可以指出我做错了什么吗? 我应该在函数内部进行什么 group_by 才能在
wk
wk
之间切换 使用
month
功能?数据和代码如下:
ci

	
r tidyverse
1个回答
0
投票
x <- structure(list(wk = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3), month = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), xd = c(0.0370098838217444, 0.0391215970961887, 0.0409865246890313, NA, NA, NA, NA, 0.015188, 0.007513, 0.012716, 0.013962, 0.014259, 0.023553, 0.032122, 0.03953, 0.028946, 0.030769, 0.030815, 0.029187, 0.022604), td = c(0.02701157274146, 0.0284158620689655, 0.0296560389182058, NA, NA, NA, NA, 0.0125, 0.007396, 0.010856, 0.011685, 0.011882, 0.018063, 0.023761, 0.028687, 0.021649, 0.022861, 0.022892, 0.021809, 0.017432), pd = c(317.308439683869, 0, 126.719553152898, NA, NA, NA, NA, 2671.6, 3540.6976744186, 1270.35740604274, 1067.69362430466, 688.099646524154, 317.444499806234, 420.941879550524, 280.475476696762, 250.681324772507, 159.048160622895, 258.125109208457, 450.868907331836, 0), year = c(2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007)), class = "data.frame", row.names = c(NA, -20L)) x library(tidyverse) ci <- function(dat, by, var, conf.int = 0.90,...) { dat <- na.omit(dat) dat %>% group_by(wk) %>% #Should I group by wk here? do(data.frame(rbind(smean.cl.normal(.$var, conf.int = conf.int)))) } ci(dat = x, by = month, var = pd) # Returns NAs

代替

summarise
,然后使用
do
。并且您需要将“by”参数放在大括号中。您也不需要省略 NA,因为
unnest_wider
默认情况下会省略它们。
smean.cl.normal

ci <- function(dat, by, var, conf.int = 0.90,...) {
  #dat <- na.omit(dat)
  dat %>%
    group_by({{by}}) %>%   
    dplyr::summarise(mean=list(smean.cl.normal({{var}}, conf.int = conf.int))) %>%
    unnest_wider(mean)
}

ci(dat = x, by = month, var = pd)

	
© www.soinside.com 2019 - 2024. All rights reserved.