私たちは、SAS でコーディングされたモデルの結果を R で再現しようと実際に試みています。モデルは次のようになります: ln(Duration)=X'B+S*e、ここで X は 10 個の独立変数の行列、B は係数のベクトル、S はスケール パラメーター、e は誤差項です。
使用するデータセットはこちら
そこには、SAS コードも含まれています。
最初の試行は次のようになりました。
Dur <- survreg(Surv(Duration, Censor==0) ~ Acq_Expense + Acq_Expense_SQ + Ret_Expense + Ret_Expense_SQ + Crossbuy + Frequency + Frequency_SQ + Industry + Revenue + Employees, dist='weibull', data = daten [daten$Acquisition==1, ])
summary(Dur)
しかし、このモデルの係数は正しくありません。次の図では、左側に R 出力、右側に正しい SAS 出力が表示されます。
二乗項 (Acq_Expense_SQ、Ret_Expense_SQ) で問題が検出されました。これらの項を除外すると、他のすべての推定値が正しい値にはるかに近くなるためです。したがって、二乗項を係数 0.001 で縮小しようとしました。
Acq_Expense_SQ2 <- data.frame(0.001*daten$Acq_Expense_SQ)
colnames(Acq_Expense_SQ2) <- c("Acq_Expense_SQ2")
daten["Acq_Expense_SQ2"] <- Acq_Expense_SQ2
date3 <- subset(daten, daten$Acquisition==1)
Ret_Expense_SQ2 <- data.frame(0.001*daten$Ret_Expense_SQ)
colnames(Ret_Expense_SQ2) <- c("Ret_Expense_SQ2")
daten["Ret_Expense_SQ2"] <- Ret_Expense_SQ2
date3 <- subset(daten, daten$Acquisition==1)
Dur <- survreg(Surv(Duration, Censor == 0, type = 'right') ~ Acq_Expense + Acq_Expense_SQ2 + Ret_Expense + Ret_Expense_SQ2 + Crossbuy + Frequency + Frequency_SQ + Industry + Revenue + Employees, dist='weibull', scale = 0, data = date3)
summary(Dur)
現在、係数は正しい値にかなり近づいていますが、その理由はわかりません。この問題について考えられる説明はありますか? それとも、私たちのコードに別の問題がありますか?