1

私たちは、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)

現在、係数は正しい値にかなり近づいていますが、その理由はわかりません。この問題について考えられる説明はありますか? それとも、私たちのコードに別の問題がありますか?

4

0 に答える 0