找到最好的医疗途径

时间:2017-11-03 14:48:54

标签: r data-analysis

根据医院数据,我知道不同医生针对不同患者人口统计特定治疗所采取的各种手术。现在我想分析这些不同的路径,并了解哪些是最好的成本。当我说得最好并不意味着最低成本的那个是最好的。应该找出大多数医生遵循的路径,其中成本最低。我的数据是:

Doctor Procedure1 Procedure2 Procedure3 Procedure4 Procedure5 Charge
   111          1          2          3          4          5    200
   222          1          4          7          4          9    185
   333          2          3          5          1          9    250
   444          1          2          3          4          6    210
   222          1          2          3          4          6    210

我想知道所有这些路径哪一个是最好的。

2 个答案:

答案 0 :(得分:0)

以下过程将获得独特的程序组合,并计算它们的受欢迎程度(即行数)以及它们的平均成本:

library(dplyr)

dt = read.table(text = "
Doctor    Procedure1   Procedure2   Procedure3   Procedure4   Procedure5   Charge
111         1               2            3            4           5           200
222         1               4            7            4           9           185
333         2               3            5            1           9           250
444         1               2            3            4           6           210
222         1               2            3            4           6           210
", header=T)

dt %>%
  group_by(Procedure1,Procedure2,Procedure3,Procedure4,Procedure5) %>%   # group by those 5 steps / procedures
  summarise(NumRows = n(),                                               # count how many rows they have
            AvgCharge = mean(Charge)) %>%                                # calculate average of charge
  ungroup() %>%                                                           
  arrange(desc(NumRows))                                                 # order by popularity

# # A tibble: 4 x 7
#   Procedure1 Procedure2 Procedure3 Procedure4 Procedure5 NumRows AvgCharge
#        <int>      <int>      <int>      <int>      <int>   <int>     <dbl>
# 1          1          2          3          4          6       2       210
# 2          1          2          3          4          5       1       200
# 3          1          4          7          4          9       1       185
# 4          2          3          5          1          9       1       250

你应该考虑如何选择最受欢迎的。它是顶级X吗?它是代表Y%行/医生的吗? 那么你应该考虑对你的平均值进行一些统计比较,而不是仅选择最低值。

答案 1 :(得分:0)

对于每个路径dd显示其Count(即具有该路径的行数)。 ddCount的降序和Charge的升序排序。最后,我们显示了按Count的降序排序的每个Count最便宜的路径。

dd <- aggregate(list(Count = 1:nrow(DF)), DF[-1], length)
dd <- dd[order(-dd$Count, dd$Charge), ]
dd2 <- dd[ave(dd$Charge, dd$Count, FUN = function(x) x == x[1]) == 1, ]

,并提供:

> dd2
  Procedure1 Procedure2 Procedure3 Procedure4 Procedure5 Charge Count
3          1          2          3          4          6    210     2
1          1          4          7          4          9    185     1

也就是说,在那些使用两次12346的路径中,费用最低,费用为210,其中使用的路径14749是最便宜的,费用为185.您现在可以评估计数和充电之间的权衡。 (要查看所有路径的计数,请查看dd每个路径包含一行,其CountCountCharge排序。)

您可以做的另一件事是删除支配的行。也就是说,如果任何行具有比当前行更高的Count和更低的Charge,那么我们可以删除当前行。在这个例子中没有占主导地位的行,但万一可能会删除它们:

is_dom <- function(r, DF) with(DF, any(Count[-r] > Count[r] & Charge[-r] < Charge[r]))
dominated <- sapply(1:nrow(dd2), is_dom, dd2)
dd3 <- dd2[!dominated, ]

注意:可重复形式的输入是:

DF <-
structure(list(Doctor = c(111L, 222L, 333L, 444L, 222L), Procedure1 = c(1L, 
1L, 2L, 1L, 1L), Procedure2 = c(2L, 4L, 3L, 2L, 2L), Procedure3 = c(3L, 
7L, 5L, 3L, 3L), Procedure4 = c(4L, 4L, 1L, 4L, 4L), Procedure5 = c(5L, 
9L, 9L, 6L, 6L), Charge = c(200L, 185L, 250L, 210L, 210L)), .Names = c("Doctor", 
"Procedure1", "Procedure2", "Procedure3", "Procedure4", "Procedure5", 
"Charge"), class = "data.frame", row.names = c(NA, -5L))

更新:简化。