【发布时间】:2017-04-19 02:45:24
【问题描述】:
Updated:现在可以了,但还是不知道其他方法是如何工作的。
cuts <- seq(from=3, to=36, by=0.01)
for (i in cuts) {
cut_off<- i
set.seed(666)
samp_h <-rnorm(1000,mean=12,sd=3)
samp_d <-rnorm(1000,mean=18,sd=6)
a <- sum(samp_h <= cut_off)
c <- sum(samp_h > cut_off)
b <- sum(samp_d <= cut_off)
d <- sum(samp_d > cut_off)
sens <- a / (a+c)
spci <- d / (d+b)
assign(paste("ss",as.character(cut_off),sep = ""), sens)
assign(paste("sp",as.character(cut_off),sep = ""), spci)}
ss_v<- unlist(
lapply(
paste0("ss",cuts),
get)
)
sp_v<- unlist(
lapply(
paste0("sp",cuts),
get)
)
plot(1-sp_v, ss_v)
大家好: 我试图使用不同的“cut_off”来获得不同的“sens”(敏感)和“spci”(特异性)。上面代码的问题是,对于 34 个“剪切”,我可以获得结果。但如果我将剪辑更改为:
cuts <- seq(from=3, to=36, by=0.01)
此方法无法返回结果。问题是我计算每个向量中的数字,所以我问如何使用向量直接计算“ss_v”和“ss_p”。非常感谢。
背景资料: 假设“健康”患者的抗体水平分布正常(12,32),而“患病”患者的抗体水平分布正常(18,62)。请注意,这些是“编造”的数字,并不现实。 模拟大量患病和健康患者的抗体计数(例如,每个患者 1000 人)——使用 R 中的“rnorm”函数。如果选择 15 的截止值,灵敏度和特异性是多少? 记录 3 到 36 之间的临界值范围(例如 3、3.01、3.02、……、35.98、35.99、36)的灵敏度和特异性。提示:使用 R 中的“seq”函数生成截止值,然后使用“for”循环或矢量化计算计算灵敏度和特异性。 绘制 x 轴为“1-Specificity”,y 轴为“Sensitivity”的图。
【问题讨论】:
-
因此,您可以创建一个包含 2000 行的两列对象,其中包含表示抗体计数的“真值”和“值”,而不是单独分析它们。我认为使用偏态分布是可能更“生物”。无论您接受我的建议,使用对数正态或伽马随机变量,您都将处于正确使用
table函数的位置。
标签: r