我撰寫了一個函式來使用折刀標準誤差計算兩個向量之間的平均值比率的置信區間
jackknife_CI = function(x, y, alpha = .05) {
xl = (sum(x,na.rm=T) - x) / (length(x) - 1)
yl = (sum(y,na.rm=T) - y) / (length(y) - 1)
n = length(x) length(y)
jack_se = (sd(c(xl / mean(y,na.rm=T), mean(x,na.rm=T) / yl),na.rm=T) * (n - 1)) / sqrt(n)
mean(x, na.rm = T) / mean(y, na.rm = T) jack_se * qnorm(c(alpha/2,1-alpha/2))
}
然后我想通過以下方式將它與 ToothGrowth 資料集一起使用:
df1 =
ToothGrowth %>%
filter(supp == "OJ") %>%
rename(len_x = len) %>%
select(dose,len_x)
df2 =
ToothGrowth %>%
filter(supp == "VC") %>%
rename(len_y = len) %>%
select(dose, len_y)
df = cbind(df1,df2)
df = df[,-3]
jack_CI = df %>% group_by(dose) %>% jackknife_CI(x = len_x, y = len_y)
我的問題是最后一行導致錯誤:
Error in jackknife_CI(., x = len_x, y = len_y) : object 'len_x' not found
我該如何解決這個問題?
uj5u.com熱心網友回復:
最后一行需要是:
jack_CI = jackknife_CI(x = df$len_x, y = df$len_y)
您運行它的方式被解釋如下:
jack_CI = jackknife_CI(group_by(df, dose), x = len_x, y = len_y)
這導致了幾個問題:
jackknife_CI不希望第一個引數是資料框。(因為管道操作員)len_x并且len_y在資料框之外無法識別。
如果要在每個組上運行該功能,您可以執行以下操作:
df %>% group_by(dose) %>%
do({
ci <- jackknife_CI(.$len_x, .$len_y)
tibble(low = ci[1], hi = ci[2])
})
我使用do是因為該函式回傳兩個值。否則,您將只能使用summarize. 每個組都被傳遞給do它,然后回傳一個小標題(注意 中的最后一行do),然后將其堆疊以回傳結果。我指的是其中的每個組do,.$variable_name其中點參考了正在傳遞的值(在這種情況下,每個組的資料框)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327690.html
上一篇:創建一個以外部串列為條件的新變數
下一篇:從字符向量CSV讀取到R中的碎石
