ポアソン回帰を使用した死亡率のモデリング


8

私はクローン病患者の死亡率の傾向(1998年と2011年の間)を調べています。各患者(症例)は1998年から2011年の間に含まれています。含まれるとき、各患者は同じ年齢と性別の健康な対照と一致しています。死亡率の傾向を分析しています。これを直接調整すると、調整なしで、時間の経過に伴う死亡率が変動します。これは、特定の年を含む個人が別の年を含む年と比較できないためと思われます。したがって、私は死亡率を調整することを目指しています。両方のグループ(ケースとコントロール)の死亡率は時間とともに低下し、ケースとコントロールのギャップは次第に狭くなると思います。

私の考えは、ポアソン回帰によって調整を行うことです。私のデータは個人レベルです。私が取得を希望する1つのモデルにオフセットとして含まれることになる2011年の生存時間に1998年から毎年、ケースおよびコントロールのための(1000年人年あたり)発生率の推定値を。ここでも同様のことが行われています

データセットの最初の200行をアタッチしました。これは1500人の個人で構成されています。こちらがデータです。変数の説明:

  • 死亡=追跡中に患者が死亡したかどうか
  • surv =日単位の生存時間
  • 年齢グループ=分類された年齢グループ(4グループ)
  • 性別=男性/女性
  • 診断=健康なコントロールでは0、クローン病では1
  • 年齢=年齢
  • included_year =調査に含まれた年

これまでに何を試しましたか?ポアソンモデルをRのglm()関数で、個々の観測値(オフセットとしてlog(surv))を使用して近似しようとしましたが、エラーを受信したか、近似の使用方法を理解できませんでした。また、データをグループに集約してから、glm()で死亡数を分析しました。発生率を取得するためにフィットを使用した場合、特定の年齢/年齢グループと性別のレートのみを取得できました(predict()関数で指定する必要がある場合)。

添付されたデータセットで実行できるいくつかの統計的なアドバイスとコーディングの例を本当に感謝します。


1
エラーを受け取ったか、フィットの使用方法を理解できませんでした。私はあなたのデータを合わせるためにスタタを使用しましたが、それらは問題ありません(最初の50ケースに性別が1つしか含まれておらず、性別を
除外する

1
症例と対照において、毎年1人あたりの発生率(1000人年あたり)を取得できましたか?データをグループに集約しましたか、それともモデルを個々のレベルのデータに適合させましたか?これがコードと結果です(個々の観察を使用):> glm(dead〜age + gender + factor(diagnosis)+ factor(inclusion_year)、offset = log(surv)、data = data1、family = "poisson")エラーin contrasts<-*tmp*、value = contr.funs [1 + isOF [nn]]):コントラストは、2つ以上のレベルの因子にのみ適用できます
Frank49

ケースとコントロールの予測値が毎年別々に必要な場合は、diagnosis*inclusion_year相互作用項のセットを組み込む必要がある場合があります。現在のモデルをそのまま使用する場合、ケースnumはdiagnosis、相互に作用することが許可されていないため、のベータ版のみが異なり、年ごとに一定です。その後、予測は単なる置換になります。私はあまりうるさくないので、平均年齢と平均男性の割合を差し引くだけです。
Penguin_Knight

Penguin_knightに返信いただきありがとうございます。本当にありがとうございます。データをグループに集約する必要があるか、または個々のレベルのデータでモデルを当てはめる必要があるかはまだわかりませんが?
Frank49

私はこの設定に混乱しています。検閲をどのように扱っていますか?
Glen_b-モニカを復活させる14

回答:


2

データセット(利用不可)を見なければ、ほとんど正しいようです。ポアソン回帰の良い点は、提案されているように使用するとレートを提供できることです。覚えておく価値のあることの1つは、負の二項回帰に切り替える必要のある過剰分散が存在する可能性があることです(MASSパッケージを参照)。

ポアソン回帰では、データが集約されているかどうかは関係ありませんが、実際には非集約データは脆弱であり、予期しないエラーを引き起こす可能性があります。surv == 0いずれの場合も持てないことに注意してください。私がテストしたとき、見積もりは同じです:

set.seed(1)
n <- 1500
data <- 
  data.frame(
    dead = sample(0:1, n, replace = TRUE, prob = c(.9, .1)),
    surv = ceiling(exp(runif(100))*365),
    gender = sample(c("Male", "Female"), n, replace = TRUE),
    diagnosis = sample(0:1, n, replace = TRUE),
    age = sample(60:80, n, replace = TRUE),
    inclusion_year = sample(1998:2011, n, replace = TRUE)
  )

library(dplyr)
model <- 
  data %>% 
  group_by(gender, 
           diagnosis,
           age,
           inclusion_year) %>% 
  summarise(Deaths = sum(dead),
            Person_time = sum(surv)) %>%
  glm(Deaths ~ gender + diagnosis + I(age - 70) + I(inclusion_year - 1998) + offset(log(Person_time/10^3/365.25)), 
      data = . , family = poisson)

alt_model <- glm(dead ~ gender + diagnosis + I(age - 70) + I(inclusion_year - 1998) + offset(log(surv/10^3/365.25)), 
    data = data , family = poisson)
sum(coef(alt_model) - coef(model))
# > 1.779132e-14
sum(abs(confint(alt_model) - confint(model)))
# > 6.013114e-11

レートを取得するとき、切片が解釈可能になるように変数を中央に配置することが重要です。例:

> exp(coef(model)["(Intercept)"])
(Intercept) 
    51.3771

基本レートとして解釈でき、共変量はレート比です。10年後に基本レートが必要な場合:

> exp(coef(model)["(Intercept)"] + coef(model)["I(inclusion_year - 1998)"]*10)
(Intercept) 
     47.427 

現在、包含年をトレンド変数としてモデル化しましたが、おそらく非線形性をチェックする必要があり、時系列の分類を行うと役立つ場合があります。この記事ではこのアプローチを使用しました。

D.ゴードン、P。ギルグレン、S。エロランタ、H。オルソン、M。ゴードン、J。ハンソン、およびKE Smedby、「詳細な解剖学的位置と紫外線曝露のパターンによる皮膚黒色腫の発生率の時間的傾向:遡及的集団ベースの研究」、メラノーマRes。、vol。25、いいえ。4、pp。348–356、2015年8月。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.