我有一个关于如何编写R代码的非常复杂的问题,因为我经历了所有可能的选项而没有任何结果。我可以在不到一个小时的时间内完成excel的第一部分,即得到以下公式的结果。
C = 1 / n Σ nj ( cj - aj ) ^ 2
n =观察次数, nj =区间内的观察次数, aj =每个班级间隔的正确响应比例, Σ是每个 j 等级与等级间隔的总和。
我想在R中做的原因是因为(1)一切都可以用同一个程序完成,而且 - 更重要的是 - (2)我需要做jackknife(或bootstrap)这个公式来得到折刀 SE (我需要推理置信区间)。
这是数据
> str(data)
'data.frame': 372 obs. of 6 variables:
$ ID : int 120 432 664 163 283 659 78 150 158 188 ...
$ age : int 20 20 16 18 20 15 20 20 16 20 ...
$ sex : Factor w/ 2 levels "female","male": 1 1 1 2 2 2 1 1 1 2 ...
$ poconf123 : int 1 1 1 1 1 1 1 1 1 1 ...
$ PoConfPC : int 40 50 40 30 10 50 50 30 40 30 ...
$ idacc : Factor w/ 2 levels "accurate","inaccurate": 1 1 1 1 1 1 2 2 2 2 ...
要获取 nj , cj 和 aj ,我尝试了以下代码
group_by(data, poconf123) %>% #this is to get results for each class intervall
summarise(poconf = mean(PoConfPC)) %>% #this is to get cj
summarise(NumAcc=n(), prop = mean(idacc==1)/n()) #this is to get nj and aj
使用上面的代码我收到以下错误消息
Error in summarise_impl(.data, dots):
Evaluation error: object 'PoConfPC' not found.
单独的前两行,或仅第一行和最后一行不会产生相同的错误。但是,代码
group_by(data, poconf123) %>%
summarise(NumAcc=n(), prop = mean(idacc==1)/n())
似乎仍然不是最优的,因为我没有获得比例,例如.53,而是获得了值#34; 0。"在整个专栏中' prop'。
当然,我可以要求一个比例表,例如,
prop.table(table(data$idacc))
获得准确和不准确的比例,但这不是我真正需要的。
所以,总的来说,我甚至没有达到可以运行分析并获得单个C的程度,更不用说重切刀SE了。这让我想到了一个实际的问题,那就是我如何将这个公式编程成一个函数,所以我可以“折刀”#39;它。 下面是如何将点 - 双列相关与推理置信区间所需的输出相关联的示例。
library(bootstrap)
xx = data$PoConfPC
yy = data$idacc
nn = length(xx)
theta <- function(x,xx,yy) {biserial.cor(xx[x], yy[x], level = 1)}
results <- jackknife(1:nn, theta, xx, yy)
summary(results$jack.values); results$jack.se; results$jack.bias