SurvivalModelFit[{e1,e2,…}]
事象時間 eiの生存モデルを作る.
SurvivalModelFit
SurvivalModelFit[{e1,e2,…}]
事象時間 eiの生存モデルを作る.
詳細とオプション
- SurvivalModelFitは生存,信頼性,持続時間の解析に使われる.これは,不完全なデータからノンパラメトリック生存分布と信頼尺度を直接与える.
- SurvivalModelFitはそれ自体が構築する生存モデルを表す記号SurvivalModelオブジェクトを与える.モデルの特性と診断は model["property"]で得ることができる.
- 事象 eiの形式はEventDataで使われる形式に従う.
- model[h]中の h の形式を指定することで,生存モデルのさまざまな関数形式が得られる.次は使用可能な形式である.
-
"CDF" 累積分布関数 "CHF" 累積ハザード関数 "SF" 生存関数 - 特定の時間 t におけるSurvivalModelFitからのフィットされた関数 h の値は model[h][t]で求めることができる. model[t]は model["SF"][t]に等しい.
- Normal[model]を指定すると,推定生存関数の純関数形式が与えられる.
- 使用可能なモデル特性のリストは model["Properties"]で得ることができる.
- モデルのフィットされた関数 h の特性は model["property",h]を使って求めることができる.式 model["property"]は model["property","SF"]に等しい.
- model["property"]を使って得ることができるフィットされた関数に関連する特性
-
"EventTable" フィットされた関数のまとめの表 "EventTableEntries" 事象の表からの項目 "FittedFunction" フィットされた関数の純関数形式 "FullEventTable" 拡張された事象の表 "FullEventTableEntries" 完全な事象の表からの項目 "MeanSurvival" 生存時間の平均 "MedianSurvival" 生存時間の中央値 "StandardErrorFunction" フィットされた関数の標準誤差の関数形 "StandardErrors" 各時間点についての標準誤差のリスト "SurvivalDistribution" フィットに使われたDataDistributionオブジェクト - フィットされた関数の信頼区間は,model["EstimationPoints"]で与えられる各時間点に対応するペアになった値のリスト{{h1,min,h1,max},…} として与えられる.
- 信頼帯は model["EstimationPoints"]のすべての時間点で評価された場合の信頼区間と等しい純関数として与えられる.
- 信頼区間と信頼帯に関連する特性
-
"PointwiseBands" 点ごとの信頼帯 "PointwiseIntervals" 点ごとの信頼区間 "EqualPrecisionBands" 同時信頼帯 "EqualPrecisionIntervals" 同時信頼区間 "HallWellnerBands" 同時Hall–Wellner信頼帯 "HallWellnerIntervals" 同時Hall–Wellner信頼区間 - 事象データに関連する特性
-
"EstimationPoints" 推定に使われる時間点 "EventData" 推定に使われるEventDataオブジェクト "EventMatrix" 可能な事象位置を示す行列 "EventMatrixPlot" 事象行列のカスタム行列プロット "TruncationMatrix" ユニットが可観測であるところを示す行列 "TruncationMatrixPlot" 切断行列のカスタム行列プロット - 異なるタイプの観測数に関連する特性
-
"AtRisk" 各時間点でリスクがある個体数 "EventCounts" 各時間点における事象の数 "LeftCensoringCounts" 各時間点における左打切り事象の数 "ObservationCount" 実験ユニットの有効な数 "RightCensoringCounts" 各時間点における右打切り事象の数 - SurvivalModelFitには次のオプションを使うことができる.
-
ConfidenceLevel 95/100 区間と帯に使う水準 » ConfidenceRange All 同時信頼帯の範囲 » ConfidenceTransform "LogLog" 使用する信頼変換 » Method Automatic モデルのフィッティングに使用するメソッド » - ConfidenceLevel->p とすると,さまざまな関数形式について確率 p の信頼区間と信頼帯が計算される.
- ConfidenceRange->{tmin,tmax}はフィットされた関数についての tmin から tmaxまでの確率 p の同時信頼区間と同時信頼帯を与える.
- ConfidenceTransformの使用可能な設定値には,"Linear","LogLog","ArcSinSqrt","Log","Logit"あるいは純関数 g がある.
- SurvivalModelFitは自動的にデータに最適なメソッドを選ぶ.右打切りデータにはKaplan–Meier推定器が使われる.その他のタイプの打切りには,首尾一貫した方法で推定器が構築される.メソッドの中には特定のタイプの打切りあるいは切断しかサポートしないものもある.
- Method->estimator と設定すると分布関数に使う推定器が指定できる.次は使用可能な設定値である.
-
"KaplanMeier" 右打切りデータに使う積極限推定器 "NelsonAalen" Nelson–Aalen累積ハザード推定器に基づく "Turnbull" 区間打切りデータのためのTurnbullアルゴリズム "Noncensored" 打切りは無視され区間の中点が使われる "SelfConsistency" 二重打切りデータのためのTurnbullアルゴリズム - 例題の「オプション」の項にその他のメソッド設定がある. »
例題
すべて開く すべて閉じる例 (1)
t = {7, 23, 22, 6, 25, 20, 19, 6, 17, 6, 13};
i = {0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0};𝒮 = SurvivalModelFit[EventData[t, i]]𝒮[20]Normal[𝒮][x]//PiecewiseExpandPlot[{𝒮[x], 𝒮["PointwiseBands"][x]}, {x, 5, 30}]スコープ (29)
基本的な用法 (4)
data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];Normal[𝒮][x]//PiecewiseExpand𝒮[24]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];𝒮["EventTable"]モデルの推定CDFをプロットする:
data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];Plot[𝒮["CDF"][x], {x, 20, 45}, Exclusions -> None]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];𝒮["Properties"]モデルの特性 (16)
data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];𝒮["PointwiseIntervals"]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];𝒮["EqualPrecisionIntervals"]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];生存関数についての各時間点での95%Hall–Wellner区間:
𝒮["HallWellnerIntervals"]data = BlockRandom[SeedRandom[1];EventData[RandomChoice[Range[25, 35], 150], RandomChoice[{.8, .1, .1} -> {0, 1, -1}, 150]]];𝒮 = SurvivalModelFit[data];Plot[{𝒮[x], 𝒮["PointwiseBands"][x]}, {x, 22, 40}, PlotStyle -> {Automatic, Dashed}, AxesOrigin -> {22, 0}]𝒮["PointwiseBands"][𝒮["EstimationPoints"]] == 𝒮["PointwiseIntervals"]data = BlockRandom[SeedRandom[1];EventData[RandomChoice[Range[25, 35], 150], RandomChoice[{.8, .1, .1} -> {0, 1, -1}, 150]]];𝒮 = SurvivalModelFit[data];Plot[{𝒮[x], 𝒮["EqualPrecisionBands"][x]}, {x, 22, 40}, PlotStyle -> {Automatic, Dashed}, AxesOrigin -> {22, 0}]𝒮["EqualPrecisionBands"][𝒮["EstimationPoints"]] == 𝒮["EqualPrecisionIntervals"]data = BlockRandom[SeedRandom[1];EventData[RandomChoice[Range[25, 35], 150], RandomChoice[{.8, .1, .1} -> {0, 1, -1}, 150]]];𝒮 = SurvivalModelFit[data];Plot[{𝒮[x], 𝒮["HallWellnerBands"][x]}, {x, 22, 40}, PlotStyle -> {Automatic, Dashed}, AxesOrigin -> {22, 0}]𝒮["HallWellnerBands"][𝒮["EstimationPoints"]] === 𝒮["HallWellnerIntervals"]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];ListPlot[Transpose[{𝒮["EstimationPoints"], 𝒮["StandardErrors"]}], Filling -> Axis]𝒮["StandardErrorFunction"][𝒮["EstimationPoints"]] === 𝒮["StandardErrors"]推定SurvivalFunctionの結果を表にする:
data = BlockRandom[SeedRandom[1];EventData[RandomChoice[Range[25, 35], 150], RandomChoice[{.8, .2} -> {0, -1}, 150]]];𝒮 = SurvivalModelFit[data];𝒮["FullEventTable"]𝒮["FullEventTableEntries"]data = BlockRandom[SeedRandom[1];EventData[RandomChoice[Range[25, 35], 150], RandomChoice[{.8, .2} -> {0, -1}, 150]]];𝒮 = SurvivalModelFit[data];𝒮["EventTableFunction"][Range[25, 30]]刻み幅5で25から30までの時間における事象の履歴データを示す事象の表:
𝒮["FullEventTableFunction"][Range[25, 35, 5]]𝒮["FullEventTableEntriesFunction"][Range[25, 35, 5]]data = {30, 32, 26, {-∞, 42}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];𝒮["EventMatrixPlot"]𝒮["EventCounts"]𝒮["RightCensoringCounts"]𝒮["LeftCensoringCounts"]"EventMatrix"を使ってどこで事象が起こりうるかを示す:
data = {10, 12, 12, 12, {-∞, 13}, {15, ∞}, {12, 14}};𝒮 = SurvivalModelFit[data];𝒮["EventMatrix"]//MatrixFormMax /@ 𝒮["EventMatrix"]{-∞}~Join~𝒮["EstimationPoints"]~Join~{∞}TableForm[𝒮["EventMatrix"], TableHeadings -> {None, {-∞}~Join~𝒮["EstimationPoints"]~Join~{∞}}, TableSpacing -> {1, 1}]"TruncationMatrix"を使ってユニットが観測された場所を示す:
data = {5, 6, 7, 8};
tr = {{4, ∞}, {5, 7}, {6, ∞}, {7, ∞}};𝒮 = SurvivalModelFit[EventData[data, None, tr]];𝒮["TruncationMatrix"]//MatrixForm{-∞}~Join~𝒮["EstimationPoints"]~Join~{∞}data = {10, 12, 12, 12, {-∞, 13}, {15, ∞}, {12, 14}};𝒮 = SurvivalModelFit[data];𝒮["EventMatrixPlot"]data = {5, 6, 6, 7, 8};
tr = {{4, ∞}, {5, 7}, {5, 7}, {6, ∞}, {7, ∞}};𝒮 = SurvivalModelFit[EventData[data, None, tr]];𝒮["TruncationMatrixPlot"]data = {30, 32, 26, {-∞, 25}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];{{"t", "SubscriptBox[d, t]", "SubscriptBox[c, t]", "SubscriptBox[r, t]"}}~Join~Transpose[𝒮[{"EstimationPoints", "EventCounts", "LeftCensoringCounts", "RightCensoringCounts"}]]//Griddata = BlockRandom[SeedRandom[1];EventData[RandomChoice[Range[25, 35], 150], RandomChoice[{.8, .1, .1} -> {0, 1, -1}, 150]]];𝒮 = SurvivalModelFit[data];𝒮["EventTable", "CHF"]データ型 (9)
打切り (7)
t1 = {10, 15, 16, 18, 21};
t2 = {{10, 10}, {15, 15}, {16, 16}, {18, 18}, {21, 21}};𝒮1 = SurvivalModelFit[t1];
𝒮2 = SurvivalModelFit[t2];Table[Plot[𝒮[x], {x, 5, 25}, Exclusions -> None], {𝒮, {𝒮1, 𝒮2}}]t = {10, 15, 16, 18, 21};
Subscript[t, c] = {10, 15, {16, ∞}, 18, 21};𝒮1 = SurvivalModelFit[t];
𝒮2 = SurvivalModelFit[Subscript[t, c]];16におけるジャンプが除かれ生存関数は16より上でスケールし直された:
Table[Plot[𝒮[x], {x, 5, 25}, Exclusions -> None], {𝒮, {𝒮1, 𝒮2}}]t = {10, 15, 16, 18, 21};
Subscript[t, c] = {10, 15, {-∞, 16}, 18, 21};𝒮1 = SurvivalModelFit[t];
𝒮2 = SurvivalModelFit[Subscript[t, c]];Table[Plot[𝒮[x], {x, 5, 25}, Exclusions -> None], {𝒮, {𝒮1, 𝒮2}}]t = {10, 15, 16, 18, 21};
Subscript[t, c] = {10, 15, {16, 20}, 18, 21};𝒮1 = SurvivalModelFit[t];
𝒮2 = SurvivalModelFit[Subscript[t, c]];Table[Plot[𝒮[x], {x, 5, 25}, Exclusions -> None], {𝒮, {𝒮1, 𝒮2}}]右打切りと左打切りの観測の任意の組合せが可能である(両側打切り):
t = {10, 15, 16, 18, 21};
Subscript[t, c] = {10, {-∞, 15}, 16, {18, ∞}, 21};𝒮1 = SurvivalModelFit[t];
𝒮2 = SurvivalModelFit[Subscript[t, c]];Table[Plot[𝒮[x], {x, 5, 25}, Exclusions -> None], {𝒮, {𝒮1, 𝒮2}}]任意のタイプの打切りをデータに同時に含むことができる(混合打切り):
t = {10, 15, 16, 18, 21};
Subscript[t, c] = {10, {-∞, 15}, {14, 17}, {18, ∞}, 21};2番目,3番目,4番目の観測は,それぞれ左打切り,区間打切り,右打切りである:
𝒮1 = SurvivalModelFit[t];
𝒮2 = SurvivalModelFit[Subscript[t, c]];Table[Plot[𝒮[x], {x, 5, 25}, Exclusions -> None], {𝒮, {𝒮1, 𝒮2}}]EventDataをステータス指標と一緒に使って打切り観測を示す:
event = {10, 15, 16, 18, 21};right = {0, 1, 1, 0, 0};
left = {0, -1, -1, 0, 0};
double = {0, 1, -1, 0, 0};sRight = SurvivalModelFit[EventData[event, right]];
sLeft = SurvivalModelFit[EventData[event, left]];
sDouble = SurvivalModelFit[EventData[event, double]];MapThread[Plot[#1[x], {x, 5, 25}, Exclusions -> None, PlotLabel -> #2]&, {{sRight, sLeft, sDouble}, {"right", "left", "double"}}]切断 (2)
EventDataを使って切断観測を指定する:
event = {10, 15, 16, 18, 21};tLeft = {0, 4, 3, 1, 0};
tInterval = {{4, 20}, {13, 16}, {10, 18}, {18, 26}, {0, 25}};sLeft = SurvivalModelFit[EventData[event, None, tLeft]];
sInterval = SurvivalModelFit[EventData[event, None, tInterval]];MapThread[Plot[#1[x], {x, 5, 25}, Exclusions -> None, PlotLabel -> #2]&, {{sLeft, sInterval}, {"left", "interval"}}]EventDataを使って打切りと切断を混ぜることができる:
event = {10, 15, 16, 18, 21};
cens = {0, 0, 1, 0, 1};
tr = {0, 4, 3, 1, 0};𝒮 = SurvivalModelFit[EventData[event, cens, tr]];Plot[𝒮[x], {x, 5, 25}, Exclusions -> None]オプション (10)
ConfidenceLevel (3)
data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data, ConfidenceLevel -> .9]𝒮["PointwiseIntervals"]𝒮["PointwiseIntervals", ConfidenceLevel -> .9]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];𝒮["PointwiseIntervals"] === 𝒮["PointwiseIntervals", ConfidenceLevel -> 95 / 100]data = {{10, 12}, {11, 13}, {15, 18}, 16, {18, 20}, 20, 21};𝒮 = SurvivalModelFit[data]clev = {.7, .75, .8, .85, .9, .95};Grid[Table[{i, 𝒮["PointwiseBands", ConfidenceLevel -> i][16]}, {i, clev}], Alignment -> Left]ConfidenceRange (1)
data = {{2081, ∞}, {1602, ∞}, {1496, ∞}, {1462, ∞}, {1433, ∞}, {1377, ∞}, {1330, ∞}, {996, ∞}, {226, ∞}, {1199, ∞}, {1111, ∞}, {530, ∞}, {1182, ∞}, {1167, ∞}, 418, 383, 276, 104, 609, 172, 487, 662, 194, 230, 526, 122, 129, 74, 122, 86, 466, 192, 109, 55, 1, 107, 110, 332};𝒮 = SurvivalModelFit[data]Plot[{𝒮[x], 𝒮["EqualPrecisionBands", ConfidenceRange -> {172, 383}][x]}, {x, 100, 500}, PlotRange -> {0, 1}]デフォルトで,範囲はAllに設定されている:
Plot[{𝒮[x], 𝒮["EqualPrecisionBands", ConfidenceRange -> All][x]}, {x, 0, 2081}, PlotRange -> {0, 1}]範囲の設定をFullにする:
Plot[{𝒮[x], 𝒮["EqualPrecisionBands", ConfidenceRange -> Full][x]}, {x, 0, 2081}, PlotRange -> {0, 1}]ConfidenceTransform (3)
data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data]tr = {"Linear", "LogLog", "ArcSinSqrt", "Log", "Logit"};Grid[Table[{i, 𝒮["PointwiseBands", ConfidenceTransform -> i][40]}, {i, tr}], Alignment -> Left]𝒮["PointwiseBands", ConfidenceTransform -> "LogLog"] === 𝒮["PointwiseBands"]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data]事象時間の中には95%上限が
より大きいものもあることに注意:
𝒮["EventTable", ConfidenceTransform -> "Linear"]𝒮["EventTable", ConfidenceTransform -> "LogLog"]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data]tr = {"Linear", "LogLog", "ArcSinSqrt", "Log", "Logit"};
trans = {#&, Log[Log[#]]&, ArcSin[Sqrt[#]]&, Log[#]&, Log[(#/1 - #)]&};Grid[(ints = MapThread[{#1, 𝒮["PointwiseBands", ConfidenceTransform -> #2][40]}&, {tr, trans}]), Alignment -> Left]ints[[All, 2]] == Table[𝒮["PointwiseBands", ConfidenceTransform -> i][40], {i, tr}]Method (3)
以下では単一区間打切り観測でデフォルトの推定器が遅くなっている:
t = RandomReal[ExponentialDistribution[1 / 7], 5000]~Join~{{6, 8}};
i = RandomChoice[{.9, .1} -> {0, 1}, 5000]~Join~{0};(𝒮1 = SurvivalModelFit[EventData[t, i]])//AbsoluteTiming(𝒮2 = SurvivalModelFit[EventData[t, i], Method -> "KaplanMeier"])//AbsoluteTimingPlot[(𝒮1[x] - 𝒮2[x]/𝒮1[x]), {x, 0, 30}, Exclusions -> None, PlotRange -> All]最後の観測が打ち切られると,生存はその点の先はIndeterminateになる:
data = {10, 7, {32, ∞}, 23, 22, 6, 16, {34, ∞}, {32, ∞}, {6, ∞}, {10, ∞}};𝒮 = SurvivalModelFit[data]Plot[𝒮[x], {x, 0, 50}, Exclusions -> None, PlotRange -> {0, 1}]"TailModel"サブオプションでこの動作を制御することができる:
tailMods = {"Censored", "Exponential", "Weibull", "Gamma", "Normal", "LogNormal", "GompertzMakeham", "InverseGaussian", "LogLogistic"};models = Table[SurvivalModelFit[data, Method -> "TailModel" -> i]["FittedFunction"], {i, tailMods}];MapThread[Plot[#1[x], {x, 0, 70}, PlotLabel -> ToString@#2, Ticks -> None, Exclusions -> None, PlotRange -> {0, 1}]&, {models, tailMods}]Plot[Evaluate@SurvivalModelFit[data, Method -> "TailModel" -> WeibullDistribution[a, b]][t], {t, 0, 70}, Exclusions -> None]サブオプション"StandardErrorMethod"を使って標準誤差計算を制御することができる:
data = {10, 7, 23, 22, 6, {25, ∞}, {20, ∞}, {19, ∞}, 6, {17, ∞}, 6, 13};𝒮 = SurvivalModelFit[data]Automaticと設定するとプラグインメソッドで標準誤差を計算しようとする:
Plot[𝒮["StandardErrorFunction", Method -> "StandardErrorMethod" -> Automatic][x], {x, 0, 25}, PlotRange -> All, AxesOrigin -> {0, 0}]Plot[𝒮["StandardErrorFunction", Method -> "StandardErrorMethod" -> "Bootstrap"][x], {x, 0, 25}, PlotRange -> All, AxesOrigin -> {0, 0}]さまざまなサブオプションでブートストラップの手順をより細かく制御することができる:
Plot[𝒮["StandardErrorFunction", Method -> "StandardErrorMethod" -> {"Bootstrap", "PrecisionGoal" -> 1, "AccuracyGoal" -> ∞, "RandomSeed" -> 9}][x], {x, 0, 25}, PlotRange -> All, AxesOrigin -> {0, 0}]アプリケーション (8)
26人の精神病患者のグループが死亡または研究の終了まで観察された.研究の終了時点で生存している患者の寿命は右打切りである.患者の生存についてノンパラメトリックモデルとパラメトリックモデルを比較する:
ExampleData[{"Statistics", "Psychiatric"}, "LongDescription"]d = EventData@@(ExampleData[{"Statistics", "Psychiatric"}][[All, {3, 4}]]);𝒮 = SurvivalModelFit[d]gm = EstimatedDistribution[d, GompertzMakehamDistribution[a, b]]95%の点ごとの信頼帯でのKaplan–Meier推定とGompertz–Makehamモデル:
Plot[{𝒮[t], 𝒮["PointwiseBands"][t], SurvivalFunction[gm, t]}, {t, 0, 40}, PlotPoints -> 500, Exclusions -> None, PlotStyle -> {Automatic, Dotted, Automatic}, PlotRange -> {0, 1}]𝒮["MedianSurvival"]Median[gm]次のデータは70個の発電機の換気扇の連続実行時間(単位:時間)である.関心があるのは,最低減の修理を行う場合に,さまざまな実行時間において期待される平均故障数である.換気扇の中には観察中に故障せず,右打切りとしたものもある:
fanTimes = EventData[Automatic, {{4500., 4600., 11500., 11500., 15600., 16000., 16600., 18500., 18500.,
18500., 18500., 18500., 20300., 20300., 20300., 20700., 20700., 20800., 22000, 30000., 30000,
30000, 30000, 31000, 32000, 34500., 37500., 37500., 4 ... 101000, 115000},
{0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
1, 1, 1, 1, 1, 1}, None}];mod = SurvivalModelFit[fanTimes, Method -> "NelsonAalen"]Plot[Evaluate@{mod["CHF"][x], mod["PointwiseBands", "CHF"][x]}, {x, 0, 120000}, PlotPoints -> 100, AxesLabel -> {"Hours in Use", "Cumulative Hazard"}]mod["FullEventTable", "CHF"]mod["CHF"][87500]臨床試験のために,寛解期の白血病の患者に6メルカプトプリンとプラシーボが与えられた.2つのグループの生存率を比較する:
sixmp = {10, 7, 32, 23, 22, 6, 16, 34, 32, 25, 11, 20, 19, 6, 17, 35, 6, 13, 9, 6, 10};
ci = {0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1};placebo = {1, 22, 3, 12, 8, 17, 2, 11, 8, 12, 2, 5, 4, 15, 8, 23, 5, 11, 4, 1, 8};treatment = SurvivalModelFit[EventData[sixmp, ci]];
control = SurvivalModelFit[placebo];治療群は大幅に右打切りになっているのに対し,対照群には打切りがない:
#["EventMatrixPlot"]& /@ {treatment, control}Table[model["MedianSurvival"], {model, {treatment, control}}]Plot[{treatment[x], control[x]}, {x, 0, 40}, Exclusions -> None, PlotLegends -> {"treatment", "control"}]Tarone–Ware重みのLogRankTestはこれまでの発見と一致する:
LogRankTest[{treatment["EventData"], control["EventData"]}, "TaroneWare", "TestDataTable"]191人の男子高校生にはじめてマリファナを試した年齢を尋ねた.回答の選択肢は「
歳のときはじめて試した」,「マリファナを試したことはない」,「はじめてマリファナを試した年齢は覚えていない」である:
times = {10, 11, 12, 13, 14, 15, 16, 17, 18};
censoring = {{4, 0, 0}, {12, 0, 0}, {19, 2, 0}, {24, 15, 1}, {20, 24, 2}, {13, 18, 3}, {3, 14, 2}, {1, 6, 3}, {0, 4, 1}};model = SurvivalModelFit[EventData[times, censoring]];model["EventTable"]Table[With[{et = model["EstimationPoints"]}, Show[ListLinePlot[Table[{t, model[i][t]}, {t, et}], Mesh -> All, MeshStyle -> Directive[PointSize[.04], Orange]], Graphics[Table[Line[Transpose[{{t, t}, model["PointwiseBands", i][t]}]], {t, et}]], PlotRange -> All, PlotLabel -> i]], {i, {"SF", "CHF"}}]90%信頼では,男子高校生がはじめてマリファナを試した年齢は14歳よりも上である:
model["PointwiseBands", ConfidenceLevel -> .9][14]急性リンパ性白血病の患者38人に骨髄移植が行われた.各患者について,死,再発,あるいは研究の終了まで記録が取られた.次のデータは無病生存期間と解釈することができる:
data = {{2081, ∞}, {1602, ∞}, {1496, ∞}, {1462, ∞}, {1433, ∞}, {1377, ∞}, {1330, ∞}, {996, ∞}, {226, ∞}, {1199, ∞}, {1111, ∞}, {530, ∞}, {1182, ∞}, {1167, ∞}, 418, 383, 276, 104, 609, 172, 487, 662, 194, 230, 526, 122, 129, 74, 122, 86, 466, 192, 109, 55, 1, 107, 110, 332};model = SurvivalModelFit[data, ConfidenceRange -> {100, 600}];Plot[{model[x], model["HallWellnerBands"][x], model["EqualPrecisionBands"][x], model["PointwiseBands"][x]}, {x, 100, 600}, Exclusions -> None, PlotLegends -> {"Model", "Hall-Wellner Bands", "Equal Precision Bands", "Pointwise Bands"}]survProbTest[h0_, t_, lev_] := IntervalMemberQ[Interval[model["PointwiseBands", ConfidenceLevel -> 1 - lev][400]], h0] /. {True -> Row[{"Do not reject at the ", 100 lev, "% level"}], False -> Row[{"Reject at the ", 100 lev, "% level"}]}model[400]survProbTest[1 / 2, 400, .05]ヒヒの睡眠週間に興味を持った研究者が,睡眠後に一群のヒヒの半数が木から降りる経過時間を記録した.日によっては,観測者が早く到着したので厳密に時間が計測できたこともあったが,中央値にあたるヒヒが木から降りた後で到着し,観測が左打切りになった日もあった:
ExampleData[{"Statistics", "Baboon"}, "ColumnDescriptions"]baboon = EventData[Sequence@@(ExampleData[{"Statistics", "Baboon"}])];𝒮 = SurvivalModelFit[baboon];7~9時間の区間の95%のHall–Wellner生存信頼エンベロープ:
Plot[{𝒮[t], 𝒮["HallWellnerBands", ConfidenceRange -> {7, 9}, ConfidenceTransform -> "Linear"][t]}, {t, 6, 11}, Exclusions -> None, PlotRange -> {0, 1}, PlotLegends -> {"𝒮", "Hall-Wellner Bands"}]𝒮[7] - 𝒮[9]𝒮[{"MedianSurvival", "MeanSurvival"}]腎臓障害の患者がカテーテル出口部にはじめて炎症を起こすまでの追跡調査が行われた.各患者に2種類のカテーテル(手術・経皮)のどちらか一方が装着されている.関心があるのはどちらのカテーテルを使うと炎症の発現が少ないかである:
ExampleData[{"Statistics", "KidneyInfection"}, "ColumnDescriptions"]{s, i, x} = ExampleData[{"Statistics", "KidneyInfection"}];
surgical = EventData@@(Pick[#, x, 1]& /@ {s, i});
percutaneous = EventData@@(Pick[#, x, 2]& /@ {s, i});surg = SurvivalModelFit[EventData@@(Pick[#, x, 1]& /@ {s, i})];
perc = SurvivalModelFit[EventData@@(Pick[#, x, 2]& /@ {s, i})];長期的には,経皮カテーテルを使用した方が炎症発現までの時間が長くなるようである:
Plot[{surg[t], perc[t]}, {t, 0, 40}, Exclusions -> None, PlotLegends -> {"Surgical", "Percutaneous"}]ノンパラメトリックモデルとパラメトリックワイブルモデルを比較する:
wSurg = EstimatedDistribution[surgical, WeibullDistribution[a, b]];
wPerc = EstimatedDistribution[percutaneous, WeibullDistribution[a, b], ParameterEstimator -> {"MaximumLikelihood", Method -> "NMaximize"}];Plot[{surg[t], perc[t], SurvivalFunction[wSurg, t], SurvivalFunction[wPerc, t]}, {t, 0, 40}, Exclusions -> None, PlotStyle -> {{Opacity[.5]}, {Opacity[.5]}, {Thick, ColorData[97, 1], Dashed}, {Thick, ColorData[97, 2], Dashed}}, PlotLegends -> {"Surgical: Kaplan–Meier", "Percutaneous: Kaplan–Meier", "Surgical: Weibull", "Percutaneous: Weibull"}]30人の糖尿病患者が病院で選ばれ,死または研究の終了までの記録が取られた.研究開始時と研究終了時または死亡時の被験者の年齢が記録された.次の仮説データを使って60歳ないし65歳の糖尿病患者の条件付き生存期間を糖尿病患者の生存期間と比較する.左側切断は無視する:
exit = {60, 63, 69, 62, 65, 72, 69, 73, 66, 65, 68, 74, 71, 68, 69, 70, 77, 69, 72, 79, 72, 70, 76, 71, 78, 79, 76, 73, 80, 74};
entry = {58, 58, 59, 60, 60, 61, 61, 62, 62, 62, 63, 63, 64, 66, 66, 67, 67, 67, 68, 69, 69, 69, 70, 70, 70, 71, 72, 72, 73, 73};
cens = {0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0};dUC = SurvivalModelFit[EventData[exit, cens]];Min[exit]d60 = SurvivalModelFit[EventData[exit, cens, entry]];d65 = SurvivalModelFit[EventData@@(Pick[#, exit, x_ /; x ≥ 65]& /@ {exit, cens, entry})];Plot[{dUC[x], d60[x], d65[x]}, {x, 55, 85}, Exclusions -> None, PlotPoints -> 100, PlotLegends -> {"dUC", "d60", "d65"}]d60[70]65歳の糖尿病患者が70歳を超えて生存することの90%信頼区間:
d65["PointwiseBands", ConfidenceLevel -> .9][70]特性と関係 (7)
デフォルトで,右打切りデータにはKaplan–Meier推定器が使われる:
data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data];t = 𝒮["EstimationPoints"];右打切りデータにKaplan–Meier積極限推定器を使う:
km[j_] := With[{d = 𝒮["EventCounts"], y = 𝒮["AtRisk"]}, Underoverscript[∏, i = 1, j](1 - (d[[i]]/y[[i]]))]Chop[𝒮["SF"][t] - Table[km[i], {i, Length[t]}]]Nelson–Aalen推定器は累積ハザード関数に基づいている:
data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};𝒮 = SurvivalModelFit[data, Method -> "NelsonAalen"];t = 𝒮["EstimationPoints"];na[j_] := With[{d = 𝒮["EventCounts"], y = 𝒮["AtRisk"]}, Underoverscript[∑, i = 1, j](d[[i]]/y[[i]])]Chop[𝒮["CHF"][t] - Table[na[i], {i, Length[t]}]]Chop[𝒮["SF"][t] - Table[Exp[-na[i]], {i, Length[t]}]]data = {10, {-∞, 7}, 7, 23, {22, ∞}, 25, 20, {19, ∞}, 6, 17, {-∞, 12}, 13};𝒮 = SurvivalModelFit[data]一連の信頼水準での3つの異なる事象時間についての信頼区間の幅:
TableForm[Table[{i, Apply[EuclideanDistance, 𝒮["PointwiseBands", ConfidenceLevel -> i][20]]}, {i, Range[.1, .9, .1]}], TableHeadings -> {None, {"clev", "width"}}]data = {30, 32, 26, {37, ∞}, 29, {32, ∞}, 24, {31, ∞}, {31, ∞}, 42};fun = {"SF", "CDF", "CHF"};Table[Plot[Evaluate@{SurvivalModelFit[data][i][x], SurvivalModelFit[data]["PointwiseBands", i][x]}, {x, 24, 42}, PlotStyle -> {Automatic, Dashed}, PlotLabel -> i], {i, fun}]data = {6, 7, 7, 8};
tr = {5, 5, 6, 7};𝒮tr = SurvivalModelFit[EventData[data, None, tr]];𝒮ntr = SurvivalModelFit[EventData[data, None, None]];𝒮tr["EstimationPoints"]𝒮ntr["EstimationPoints"]{𝒮tr["EventMatrixPlot"], 𝒮tr["TruncationMatrixPlot"]}{𝒮ntr["EventMatrixPlot"], 𝒮ntr["TruncationMatrixPlot"]}CoxModelFitを使って共変量がある場合の生存確率を推定する:
y = EventData[{8, 22, 6, 4, 12, 11, 2, 34, 25, 15, 8, 6, 34, 6, 32, 1, 15, 9, 9, 6}, {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0}];
x = {{67, 1}, {11, 0}, {32, 0}, {50, 1}, {65, 1}, {44, 1}, {20, 1}, {26, 0}, {69, 1}, {50, 1}, {25, 1}, {18, 0}, {63, 1}, {41, 0}, {30, 0}, {32, 1}, {46, 1}, {35, 0}, {33, 0}, {22, 0}};mod = CoxModelFit[{x, y}, {a, b}, {a, b}]mod["ParameterTable"]mod["TestTable"]Plot[Evaluate@{mod["SF"][{50, 0}][t], mod["SF"][{50, 1}][t]}, {t, 0, 40}, Exclusions -> None, PlotPoints -> 100]LogRankTestを使って複数のグループのハザード率を比較する:
e1 = EventData[{32, 34, 28, 26, 31, 25, 29, 31, 28, 25}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 1}];
e2 = EventData[{30, 19, 28, 35, 35, 29, 33, 32, 31, 29}, {0, 0, 1, 0, 0, 1, 0, 1, 0, 1}];𝒮1 = SurvivalModelFit[e1];
𝒮2 = SurvivalModelFit[e2];Plot[{𝒮1[t], 𝒮2[t]}, {t, 20, 40}, Exclusions -> None]LogRankTestを使ってハザード率を比較する:
wspec = {"AndersenPeto", "Gehan", "Equal", "TaroneWare"};Grid[Table[{w, LogRankTest[{e1, e2}, w]}, {w, wspec}], Alignment -> Left]関連するガイド
-
▪
- 保険数理計算 ▪
- 生存率分析 ▪
- ノンパラメトリック統計分布 ▪
- 信頼性解析 ▪
- 表形式モデリング ▪
- 信頼性解析の分布 ▪
- 科学的データ解析 ▪
- 生命科学と医学のデータと計算 ▪
- 確率・統計
テキスト
Wolfram Research (2012), SurvivalModelFit, Wolfram言語関数, https://reference.wolfram.com/language/ref/SurvivalModelFit.html.
CMS
Wolfram Language. 2012. "SurvivalModelFit." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/SurvivalModelFit.html.
APA
Wolfram Language. (2012). SurvivalModelFit. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/SurvivalModelFit.html
BibTeX
@misc{reference.wolfram_2026_survivalmodelfit, author="Wolfram Research", title="{SurvivalModelFit}", year="2012", howpublished="\url{https://reference.wolfram.com/language/ref/SurvivalModelFit.html}", note=[Accessed: 02-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_survivalmodelfit, organization={Wolfram Research}, title={SurvivalModelFit}, year={2012}, url={https://reference.wolfram.com/language/ref/SurvivalModelFit.html}, note=[Accessed: 02-November-2026]}