会社の保険プランの提供を分析するコードを書き込もうとしていますが、複雑です。PPO プランは簡単ですが、控除額の高い健康保険プランは複雑です。これは、家族向けプランに「分割」控除額と自己負担額の上限 (個人と合計) を導入したためです。それはこのように動作します:
- 個人が個人控除額を満たせば、90% でカバーされます。
- プランの残りの 1 人以上が控除額の合計を満たせば、家族全員が 90% でカバーされます。
- 個人は、医療費だけで家族控除額を満たすことはできません
家族 (4 人) の費用のベクトルを入力し、各プランの合計費用を出力したいと考えています。以下は、考えられるシナリオの表です。列コードは次のとおりです。
ded_ind
: 1 人の個人が個人控除額を満たしましたか?ded_tot
: 免責金額の合計に達しましたか?oop_ind
: 個人の自己負担上限に達したかoop_tot
: 自己負担額の合計が上限に達しましたか?exp_ind
= 最も高い支出者の費用exp_rem
= 残りの /other/ 家族の費用 (最高額の支出者ではない)oop_max_ind
= 個人が自己負担額の最大額を支払った費用のレベル (個人の自己負担額が最大ded_ind + 0.1 * exp_ind =
の場合)oop_max_fam
= 個人の場合と同じですが、残りの家族の場合
テーブル:
| ded_ind | oop_ind | ded_rem | oop_rem | formula
|---------+---------+---------+---------+---------------------------------------------------------------------------|
| 0 | 0 | 0 | 0 | exp_ind + exp_rem |
| 1 | 0 | 0 | 0 | ded_ind + 0.1 * (exp_ind - ded_ind) + exp_rem |
| 0 | 0 | 1 | 0 | exp_ind + ded_rem + 0.1 * (exp_rem - ded_rem) |
| 1 | 1 | 0 | 0 | oop_max_ind + exp_fam |
| 1 | 0 | 1 | 0 | ded_ind + 0.1 * (exp_ind - ded_ind) + ded_rem + 0.1 * (exp_rem - ded_rem) |
| 0 | 0 | 1 | 1 | oop_max_rem + exp_ind |
| 1 | 0 | 1 | 1 | ded_ind + 0.1 * (exp_ind - ded_ind) + oop_max_rem |
| 1 | 1 | 1 | 0 | oop_ind_max + ded_rem + 0.1 * (exp_rem - ded_rem) |
| 1 | 1 | 1 | 1 | oop_ind_max + oop_rem_max |
省略: 0 1 0 0
、0 0 0 1
、、0 1 1 0
および0 1 0 1
が存在oop_ind
しoop_rem
ない。ded_ind
ded_rem
私の現在のコードは、そのようなやや大規模なifelse
ループです(コードではなく、それが何をするか):
check if plan is ppo or hsa
if hsa plan
if exp_ind + exp_rem < ded_rem # didn't meet family deductible
if exp_ind < ded_ind # individual deductible also not met
cost = exp_ind + exp_rem
else is exp_ind > oop_ind_max # ded_ind met, is oop_ind?
ded_ind + 0.1 * (exp_ind - ded_ind) + exp_fam # didn't reach oop_max_ind
else oop_max_ind + exp_fam # reached oop_max_ind
else ...
それ以外の場合、合計は家族控除額よりも大きくなります。私はそれが 2 人以上によって貢献されたかどうかを確認し、そのように続けます。
問題の背景をいくつか説明したので、私の質問です。このような条件付きの状況を管理するには、ifelse
ループして少しずつフィルターをかけるよりも良い方法はありますか?
いくつかのより高いレベルの条件をチェックするため、コードは冗長に見えます (テーブルded_rem
が満たされているか満たされていないかを考えてください...どちらの場合もチェックする必要がded_ind
ありoop_max_ind
、コードは同じです...ちょうど配置されています)構造内の 2 つの異なる場所でifelse
)。
これは、ある種の行列演算で行うことができますか? 条件のフィルタリングを処理するためのより賢い方法のオンラインの他の例はありますか?
ご提案いただきありがとうございます。
PS 私は R を使用してshiny
おり、他の従業員が家族ごとに最良のシナリオと最悪のシナリオを入力し、ドットまたは棒グラフを介してどの計画が先行するかを確認できるように、R を使用してインタラクティブを作成します。