2017-11-03 1 views
-1

病院のデータから、私はすべて、さまざまな医師の特定の治療と異なる患者の人口統計のために行われたさまざまな処置が何であるかを知っています。今私は、これらのさまざまな経路を分析して、コスト面でどれが最良かを理解したいと考えています。私が最善を言いますと、それは最低のコストを持つものが最良であるということを意味するものではありません。大多数の医師に続く道を見つけ出すべきであり、そのうち最低の費用がかかります。私のデータは:最良の医療経路を見つける

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 

私はこれらのすべてが最良であることを知りたいと思います。

+4

質問するときは、より具体的な方法が必要です。 – CCurtis

答えて

0

ddは、Count(つまり、そのパスを持つ行の数)を示しています。 ddは、Countの降順で、昇順の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, ] 

:12346回使用されるもののパスのうち、

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

210の電荷を有する、および14749は185の電荷を有する少なくとも高価で一度使用されるもののパスのうち最も高価ですCountとChargeのトレードオフを評価できるようになりました。 (ddを見てすべてのパスのためのカウントをご覧になるにはCountChargeによって並べ替えられてCountとパスごとに1行が含まれています。)

あなたができるもう一つの事は支配行を削除することです。つまり、いずれかの行が現在の行よりも高いCountと低いChargeを持つ場合、現在の行を削除できます。この例でNO支配行が存在しないものの場合、これはそれらを除去するであろうがあるかもしれません:

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)) 

更新:簡素化。

+0

ありがとう、これは私が探していたものです... – achuthansujith

+0

支配的な行( 'dd3')を削除するオプションのコードを追加しました。この例は変更しませんが、実際のデータに対しては使用することができます。 –

+0

変更をお寄せいただきありがとうございます...私は別のコードを介してそれを達成しましたが、あなたのものは簡単で簡単です – achuthansujith

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%を表すものですか? 次に、最低値を選択するのではなく、平均値の統計的な比較を行うことを検討する必要があります。

+0

ありがとうございました。これは、以前のコメントと組み合わせると、私が気にしていたことを解決します。 – achuthansujith

関連する問題