• [艦これ][2016冬イベント] E3甲決戦支援考察

    2016-02-19 14:39830

    2016冬イベントE3甲における決戦支援の考察を行いました。

    当記事では砲撃支援について扱います。航空支援に関してはよーさんが考察しておりますので紹介いたします。

    対重巡棲姫・戦艦棲姫・空母棲姫

    棲姫クラスの敵は装甲が昼キャップを超えており、支援艦隊での昼キャップでの攻撃は装甲乱数次第では装甲を抜くことができず、装甲を抜けたとしてもかえって割合ダメージより低いダメージになってしまう場合があります。以下にCL1が命中した場合の平均ダメージをグラフで表します。交戦形態は彩雲を前提として、各交戦形態を加味して算出しています。




    上記グラフの通り、昼キャップ攻撃力150まで攻撃力が上がれば上がるほど、装甲を無駄に抜いてしまうことで平均ダメージが下がることが分かります。

    ここから、前哨戦では駆逐ハ級後期型elite確殺ラインである攻撃力117(戦艦表示火力113)、最終形態では駆逐に級後期型elite確殺ラインである攻撃力139(戦艦表示火力135)まで下げ、残りは電探等で命中率を挙げるのが効果的かと思われます。

    以下に前哨戦・最終形態それぞれでの支援編成例を示します。

    前哨戦

    最終形態

    対駆逐艦

    駆逐艦の装備が電探と主砲(火力+3)3積みのどちらが有効かを考察します。

    以下にCL1が命中した場合の敵駆逐艦の撃沈率をグラフで表します。交戦形態は彩雲を前提として、各交戦形態を加味して算出しています。


    上記グラフから、コモン駆逐艦に主砲3積みしても攻撃力64(表示火力53)にならず敵駆逐艦に効果は薄いため、電探でいいと思われます。

    夕立改二を代表する高火力駆逐艦であれば、CL1命中時の撃沈率の上昇がみられるため主砲3積みの選択肢に入るかと思われます。しかしそれでも確実に撃沈できるわけではない点には留意する必要があります。

    ソース

    グラフ作成に使用したRのソースです。

    グラフ <- function (攻撃力, 耐久, 装甲, main) {
    グラフ <- function (攻撃力, 耐久, 装甲, main) {
    平均ダメージ <- function (攻撃力, 耐久, 装甲) {
    補正後攻撃力 <- function (攻撃力, 交戦形態補正) {
    攻撃力 <- 攻撃力 * 交戦形態補正;
    攻撃力[攻撃力 > 150] <- (floor(sqrt(攻撃力 - 150) + 150))[攻撃力 > 150];
    return (攻撃力);
    };
    平均ダメージ <- function (攻撃力, 耐久, 装甲) {
    ダメージ <- rep(耐久 * 0.1, 装甲);
    防御力 <- 装甲 * 0.7 + seq(0, 装甲 - 1) * 0.6;
    ダメージ[攻撃力 - 防御力 > 0] <- (攻撃力 - 防御力)[攻撃力 - 防御力 > 0];
    return (mean(ダメージ));
    };
    return (平均ダメージ(補正後攻撃力(攻撃力, 1.2), 耐久, 装甲) * 0.15 + 平均ダメージ(補正後攻撃力(攻撃力, 1.0), 耐久, 装甲) * 0.45 + 平均ダメージ(補正後攻撃力(攻撃力, 0.8), 耐久, 装甲) * 0.4);
    };
    ylim <- c(0, ceiling(耐久 / 10));
    plot(攻撃力, sapply(攻撃力, function (攻撃力) (平均ダメージ(攻撃力, 耐久, 装甲))), ylim = ylim, type = 'l', xlab = '攻撃力', ylab = '平均ダメージ', main = main);
    lines(c(117, 117), ylim, col = 2);
    lines(c(139, 139), ylim, col = 3);
    legend('bottomleft', legend = c('ハ級確殺ライン', '二級確殺ライン'), col = c(2, 3), lty = c(1, 1));
    };
    グラフ(攻撃力, 耐久, 装甲, main);
    png(sprintf('%s.png', main), 680, 510);
    グラフ(攻撃力, 耐久, 装甲, main);
    dev.off();
    }
    グラフ(87:150, 350, 195, '重巡棲姫(前哨戦)');
    グラフ(87:150, 390, 208, '重巡棲姫(最終形態)');
    グラフ(87:150, 400, 160, '戦艦棲姫');
    グラフ(87:150, 350, 150, '空母棲姫');
    グラフ <- function (攻撃力, 耐久, 装甲, main) {
    グラフ <- function (攻撃力, 耐久, 装甲, main) {
    撃沈率 <- function (攻撃力, 耐久, 装甲) {
    補正後攻撃力 <- function (攻撃力, 交戦形態補正) {
    攻撃力 <- 攻撃力 * 交戦形態補正;
    攻撃力[攻撃力 > 150] <- (floor(sqrt(攻撃力 - 150) + 150))[攻撃力 > 150];
    return (攻撃力);
    };
    撃沈率 <- function (攻撃力, 耐久, 装甲) {
    return (mean((攻撃力 - (装甲 * 0.7 + seq(0, 装甲 - 1) * 0.6)) >= 耐久));
    };
    return (撃沈率(補正後攻撃力(攻撃力, 1.2), 耐久, 装甲) * 0.15 + 撃沈率(補正後攻撃力(攻撃力, 1.0), 耐久, 装甲) * 0.45 + 撃沈率(補正後攻撃力(攻撃力, 0.8), 耐久, 装甲) * 0.40);
    };
    plot(攻撃力, sapply(攻撃力, function (攻撃力) (撃沈率(攻撃力, 耐久, 装甲))), ylim = c(0, 1), type = 'l', xlab = '攻撃力', ylab = '撃沈率', main = main);
    lines(c(77, 77), c(0, 1), col = 2);
    lines(c(86, 86), c(0, 1), col = 3);
    legend('bottomright', legend = c('夕立改二素手', '夕立改二主砲3積み'), col = c(2, 3), lty = c(1, 1));
    }
    グラフ(攻撃力, 耐久, 装甲, main);
    png(sprintf('%s.png', main), 680, 510);
    グラフ(攻撃力, 耐久, 装甲, main);
    dev.off();
    }
    グラフ(58:140, 46, 36, '駆逐ハ級後期型elite');
    グラフ(58:140, 49, 48, '駆逐二級後期型elite');
  • 広告
  • [艦これで学ぶ統計学] 第7回 非線形回帰分析

    2015-11-01 21:191

    第4回から続く回帰分析の解説の続きです。

    前回重回帰分析を行いましたが、搭載スロット数が2, 3のときに推定式がずれているように見受けられました。そこでよりよい推定式を考えてみます。ここで搭載スロットごとに個別に夜偵の判定を行うという仮説を立ててみます。このとき、すべての夜偵が不発する確率は以下のようになります。

    夜偵不発率 = スロット当たりの夜偵不発率 ^ 搭載スロット数

    よって、夜偵発動率は以下のようになります。

    1 - 夜偵発動率 = (1 - スロットあたりの夜偵発動率) ^ 搭載スロット数

    夜偵発動率 = 1 - (1 - スロットあたりの夜偵発動率) ^ 搭載スロット数

    この仮説をもとに推定式を立ててみます。

    夜偵発動率 = 1 - (1 - (a + b × √レベル)) ^ 搭載スロット数

    この推定式をもとに回帰分析を行ってみます。このような複雑な推定式の回帰分析を非線形回帰分析といいます。Rで非線形回帰分析を行うには、Rに以下のように入力します。

    data <- read.csv(fileEncoding = "UTF-8", "C:\\Users\\Master\\Downloads\\艦これで学ぶ統計学 - 第6回 重回帰分析.csv")
    result <- nls(発動可否 ~ 1 - (1 - (a + b * sqrt(レベル))) ^ 搭載スロット数, data, list(a = 0, b = 0))
    summary(result)

    result <- nls(発動可否 ~ 1 - (1 - (a + b * sqrt(レベル))) ^ 搭載スロット数, data, list(a = 0, b = 0))とすることで非線形回帰分析を行うことができます。今までの回帰分析と違い、推定式のa, bも式の中に書く必要があります。

    この結果から推定式は以下のように求められます。

    夜偵発動率 = 1 - (1 - (-0.0382966±0.0059711) + (0.0716064±0.0008197) × √レベル) ^ 搭載スロット数

    この推定式のグラフを書いてみます。前回の重回帰分析と同様の方法で書くことができます。Rに以下のように入力します。

    result.x <- 1:150
    result.newdata.1 <- data.frame(レベル = result.x, 搭載スロット数 = 1)
    result.y.1 <- predict(result, result.newdata.1)
    plot(result.x, result.y.1, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 1, col = 1)
    par(new = TRUE)
    result.newdata.2 <- data.frame(レベル = result.x, 搭載スロット数 = 2)
    result.y.2 <- predict(result, result.newdata.2)
    plot(result.x, result.y.2, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 2, col = 2)
    par(new = TRUE)
    result.newdata.3 <- data.frame(レベル = result.x, 搭載スロット数 = 3)
    result.y.3 <- predict(result, result.newdata.3)
    plot(result.x, result.y.3, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 3, col = 3)
    par(new = TRUE)
    legend("bottomright", legend = c("搭載スロット数1", "搭載スロット数2", "搭載スロット数3"), lty = c(1, 2, 3), col = c(1, 2, 3))
    error.bar <- function (x, y, ...) {
        x.mean <- mean(x)
        y.mean <- mean(y)
        y.se <- sqrt(var(y) / length(y))
        points(x.mean, y.mean, ...);
        arrows(x.mean, y.mean - y.se, x.mean, y.mean + y.se, angle = 90, code = 3, length = 0.05, ...)
    }
    data.1.1 <- subset(data, 搭載スロット数 == 1 & レベル == 1)
    error.bar(data.1.1$レベル, data.1.1$発動可否, col = 1)
    data.1.50.55 <- subset(data, 搭載スロット数 == 1 & 50 <= レベル & レベル <= 55)
    error.bar(data.1.50.55$レベル, data.1.50.55$発動可否, col = 1)
    data.1.99 <- subset(data, 搭載スロット数 == 1 & レベル == 99)
    error.bar(data.1.99$レベル, data.1.99$発動可否, col = 1)
    data.1.116.125 <- subset(data, 搭載スロット数 == 1 & 116 <= レベル & レベル <= 125)
    error.bar(data.1.116.125$レベル, data.1.116.125$発動可否, col = 1)
    data.1.150 <- subset(data, 搭載スロット数 == 1 & レベル == 150)
    error.bar(data.1.150$レベル, data.1.150$発動可否, col = 1)
    data.2.1 <- subset(data, 搭載スロット数 == 2 & レベル == 1)
    error.bar(data.2.1$レベル, data.2.1$発動可否, col = 2)
    data.2.99 <- subset(data, 搭載スロット数 == 2 & レベル == 99)
    error.bar(data.2.99$レベル, data.2.99$発動可否, col = 2)
    data.2.150 <- subset(data, 搭載スロット数 == 2 & レベル == 150)
    error.bar(data.2.150$レベル, data.2.150$発動可否, col = 2)
    data.3.1 <- subset(data, 搭載スロット数 == 3 & レベル == 1)
    error.bar(data.3.1$レベル, data.3.1$発動可否, col = 3)

    搭載スロット数が2, 3のときもあてはまっているようにみえます。

    AICも計算してみます。Rに以下のように入力します。

    AIC(result)

    前回計算したAICよりも小さくなっているため当てはまりがよくなっていることがわかります。

    第4回から続いた回帰分析の解説もここまでになります。皆さんの艦これプレイの助けになれば幸いです。

    最後に今回使用したRのコードを載せておきます。

    data <- read.csv(fileEncoding = "UTF-8", "C:\\Users\\Master\\Downloads\\艦これで学ぶ統計学 - 第6回 重回帰分析.csv")
    result <- nls(発動可否 ~ 1 - (1 - (a + b * sqrt(レベル))) ^ 搭載スロット数, data, list(a = 0, b = 0))
    summary(result)
    result.x <- 1:150
    result.newdata.1 <- data.frame(レベル = result.x, 搭載スロット数 = 1)
    result.y.1 <- predict(result, result.newdata.1)
    plot(result.x, result.y.1, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 1, col = 1)
    par(new = TRUE)
    result.newdata.2 <- data.frame(レベル = result.x, 搭載スロット数 = 2)
    result.y.2 <- predict(result, result.newdata.2)
    plot(result.x, result.y.2, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 2, col = 2)
    par(new = TRUE)
    result.newdata.3 <- data.frame(レベル = result.x, 搭載スロット数 = 3)
    result.y.3 <- predict(result, result.newdata.3)
    plot(result.x, result.y.3, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 3, col = 3)
    par(new = TRUE)
    legend("bottomright", legend = c("搭載スロット数1", "搭載スロット数2", "搭載スロット数3"), lty = c(1, 2, 3), col = c(1, 2, 3))
    error.bar <- function (x, y, ...) {
        x.mean <- mean(x)
        y.mean <- mean(y)
        y.se <- sqrt(var(y) / length(y))
        points(x.mean, y.mean, ...);
        arrows(x.mean, y.mean - y.se, x.mean, y.mean + y.se, angle = 90, code = 3, length = 0.05, ...)
    }
    data.1.1 <- subset(data, 搭載スロット数 == 1 & レベル == 1)
    error.bar(data.1.1$レベル, data.1.1$発動可否, col = 1)
    data.1.50.55 <- subset(data, 搭載スロット数 == 1 & 50 <= レベル & レベル <= 55)
    error.bar(data.1.50.55$レベル, data.1.50.55$発動可否, col = 1)
    data.1.99 <- subset(data, 搭載スロット数 == 1 & レベル == 99)
    error.bar(data.1.99$レベル, data.1.99$発動可否, col = 1)
    data.1.116.125 <- subset(data, 搭載スロット数 == 1 & 116 <= レベル & レベル <= 125)
    error.bar(data.1.116.125$レベル, data.1.116.125$発動可否, col = 1)
    data.1.150 <- subset(data, 搭載スロット数 == 1 & レベル == 150)
    error.bar(data.1.150$レベル, data.1.150$発動可否, col = 1)
    data.2.1 <- subset(data, 搭載スロット数 == 2 & レベル == 1)
    error.bar(data.2.1$レベル, data.2.1$発動可否, col = 2)
    data.2.99 <- subset(data, 搭載スロット数 == 2 & レベル == 99)
    error.bar(data.2.99$レベル, data.2.99$発動可否, col = 2)
    data.2.150 <- subset(data, 搭載スロット数 == 2 & レベル == 150)
    error.bar(data.2.150$レベル, data.2.150$発動可否, col = 2)
    data.3.1 <- subset(data, 搭載スロット数 == 3 & レベル == 1)
    error.bar(data.3.1$レベル, data.3.1$発動可否, col = 3)
    AIC(result)

  • [艦これで学ぶ統計学] 第6回 重回帰分析

    2015-11-01 13:273
    第4回から続く回帰分析の解説の続きです。今回は夜偵を複数詰んだ場合について扱います。夜偵を複数詰んだ場合の集計結果は以下のようになっています。
    搭載スロット数レベル発動数総数発動率
    11194084.66%
    150~5523749947.49%
    1991143169967.27%
    1116~12529940074.75%
    11501385164684.14%
    21274006.75%
    29936740091.75%
    215039240098.00%
    31394009.75%

    夜偵を複数詰んだ場合の元データを以下におきました。csvファイルとしてダウンロードしてください。

    夜偵の搭載スロット数も考慮して回帰分析を行います。以下のような推定式を立てます。

    夜偵発動率 = a + b × √(レベル) + c × 搭載スロット数

    レベルに加えて搭載スロット数も推定式に加えました。レベルと搭載スロット数といったように複数の要素から行う回帰分析を重回帰分析といいます。

    Rでは重回帰分析も通常の回帰分析と同様に行うことができます。Rに以下のように入力します。

    data <- read.csv(fileEncoding = "UTF-8", "C:\\Users\\Master\\Downloads\\艦これで学ぶ統計学 - 第6回 重回帰分析.csv")
    result <- lm(発動可否 ~ sqrt(レベル) + 搭載スロット数, data)
    summary(result)

    推定式は以下のようになります。

    夜偵発動率 = (-0.190640±0.019333) + (0.078152±0.001287) × √(レベル) + (0.097281 ± 0.009084) × 搭載スロット数

    搭載スロット数が1の場合の推定式のグラフを書いてみます。Rに以下のように入力します。

    result.x <- 1:150
    result.newdata.1 <- data.frame(レベル = result.x, 搭載スロット数 = 1)
    result.y.1 <- predict(result, result.newdata.1)
    plot(result.x, result.y.1, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 1, col = 1)

    result.newdata.1 <- data.frame(レベル = result.x, 搭載スロット数 = 1)とすることで、搭載スロット数が1の場合のグラフを書くことができます。

    同様に、搭載スロット数が2, 3の場合の推定式のグラフを重ねて書いてみます。Rに以下のように入力します。

    par(new = TRUE)
    result.newdata.2 <- data.frame(レベル = result.x, 搭載スロット数 = 2)
    result.y.2 <- predict(result, result.newdata.2)
    plot(result.x, result.y.2, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 2, col = 2)
    par(new = TRUE)
    result.newdata.3 <- data.frame(レベル = result.x, 搭載スロット数 = 3)
    result.y.3 <- predict(result, result.newdata.3)
    plot(result.x, result.y.3, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 3, col = 3)
    par(new = TRUE)
    legend("bottomright", legend = c("搭載スロット数1", "搭載スロット数2", "搭載スロット数3"), lty = c(1, 2, 3), col = c(1, 2, 3))

    plotする際にlty = 2, lty = 3とすることで線の種類を変え、col = 2, col = 3とすることで線の色を変えることができます。

    legend("bottomright", legend = c("搭載スロット数1", "搭載スロット数2", "搭載スロット数3"), lty = c(1, 2, 3), col = c(1, 2, 3))とすることで判例を書くことができます。"bottomright"は判例を書く位置を表します。"lefttop"で左上に、"righttop"で右上に、"leftbottom"で左下に、"rightbottom"で右下に書くことができます。lty = c(1, 2, 3)col = c(1, 2, 3)にはplotした際に指定したltycolを順番に指定します。

    元データの値も図に書き込みます。Rに以下のように入力します。

    error.bar <- function (x, y, ...) {
        x.mean <- mean(x)
        y.mean <- mean(y)
        y.se <- sqrt(var(y) / length(y))
        points(x.mean, y.mean, ...);
        arrows(x.mean, y.mean - y.se, x.mean, y.mean + y.se, angle = 90, code = 3, length = 0.05, ...)
    }
    data.1.1 <- subset(data, 搭載スロット数 == 1 & レベル == 1)
    error.bar(data.1.1$レベル, data.1.1$発動可否, col = 1)
    data.1.50.55 <- subset(data, 搭載スロット数 == 1 & 50 <= レベル & レベル <= 55)
    error.bar(data.1.50.55$レベル, data.1.50.55$発動可否, col = 1)
    data.1.99 <- subset(data, 搭載スロット数 == 1 & レベル == 99)
    error.bar(data.1.99$レベル, data.1.99$発動可否, col = 1)
    data.1.116.125 <- subset(data, 搭載スロット数 == 1 & 116 <= レベル & レベル <= 125)
    error.bar(data.1.116.125$レベル, data.1.116.125$発動可否, col = 1)
    data.1.150 <- subset(data, 搭載スロット数 == 1 & レベル == 150)
    error.bar(data.1.150$レベル, data.1.150$発動可否, col = 1)
    data.2.1 <- subset(data, 搭載スロット数 == 2 & レベル == 1)
    error.bar(data.2.1$レベル, data.2.1$発動可否, col = 2)
    data.2.99 <- subset(data, 搭載スロット数 == 2 & レベル == 99)
    error.bar(data.2.99$レベル, data.2.99$発動可否, col = 2)
    data.2.150 <- subset(data, 搭載スロット数 == 2 & レベル == 150)
    error.bar(data.2.150$レベル, data.2.150$発動可否, col = 2)
    data.3.1 <- subset(data, 搭載スロット数 == 3 & レベル == 1)
    error.bar(data.3.1$レベル, data.3.1$発動可否, col = 3)

    data.1.1 <- subset(data, 搭載スロット数 == 1 & レベル == 1)において& 搭載スロット数 == 1とすることで、搭載スロット数が1のデータを抽出できます。error.bar(data.1.1$レベル, data.1.1$発動可否, col = 1)においてcol = 1と指定することで、エラーバーの色を指定できます。

    AICの計算もしてみます。Rに以下のように入力します。

    AIC(result)

    ここで計算したAICは、前回計算したAICと比較することはできません。AICは元データが同じ場合にのみ比較できます。前回は搭載スロット数が1のみのデータで、今回は搭載スロット数が2, 3のデータも含まれているため、比較することができません。

    最後に今回使用したRのコードを載せておきます。

    data <- read.csv(fileEncoding = "UTF-8", "C:\\Users\\Master\\Downloads\\艦これで学ぶ統計学 - 第6回 重回帰分析.csv")
    result <- lm(発動可否 ~ sqrt(レベル) + 搭載スロット数, data)
    summary(result)
    result.x <- 1:150
    result.newdata.1 <- data.frame(レベル = result.x, 搭載スロット数 = 1)
    result.y.1 <- predict(result, result.newdata.1)
    plot(result.x, result.y.1, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 1, col = 1)
    par(new = TRUE)
    result.newdata.2 <- data.frame(レベル = result.x, 搭載スロット数 = 2)
    result.y.2 <- predict(result, result.newdata.2)
    plot(result.x, result.y.2, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 2, col = 2)
    par(new = TRUE)
    result.newdata.3 <- data.frame(レベル = result.x, 搭載スロット数 = 3)
    result.y.3 <- predict(result, result.newdata.3)
    plot(result.x, result.y.3, xlim = c(1, 150), ylim = c(0, 1), xlab = "レベル", ylab = "夜偵発動率", type = "l", lty = 3, col = 3)
    par(new = TRUE)
    legend("bottomright", legend = c("搭載スロット数1", "搭載スロット数2", "搭載スロット数3"), lty = c(1, 2, 3), col = c(1, 2, 3))
    error.bar <- function (x, y, ...) {
        x.mean <- mean(x)
        y.mean <- mean(y)
        y.se <- sqrt(var(y) / length(y))
        points(x.mean, y.mean, ...);
        arrows(x.mean, y.mean - y.se, x.mean, y.mean + y.se, angle = 90, code = 3, length = 0.05, ...)
    }
    data.1.1 <- subset(data, 搭載スロット数 == 1 & レベル == 1)
    error.bar(data.1.1$レベル, data.1.1$発動可否, col = 1)
    data.1.50.55 <- subset(data, 搭載スロット数 == 1 & 50 <= レベル & レベル <= 55)
    error.bar(data.1.50.55$レベル, data.1.50.55$発動可否, col = 1)
    data.1.99 <- subset(data, 搭載スロット数 == 1 & レベル == 99)
    error.bar(data.1.99$レベル, data.1.99$発動可否, col = 1)
    data.1.116.125 <- subset(data, 搭載スロット数 == 1 & 116 <= レベル & レベル <= 125)
    error.bar(data.1.116.125$レベル, data.1.116.125$発動可否, col = 1)
    data.1.150 <- subset(data, 搭載スロット数 == 1 & レベル == 150)
    error.bar(data.1.150$レベル, data.1.150$発動可否, col = 1)
    data.2.1 <- subset(data, 搭載スロット数 == 2 & レベル == 1)
    error.bar(data.2.1$レベル, data.2.1$発動可否, col = 2)
    data.2.99 <- subset(data, 搭載スロット数 == 2 & レベル == 99)
    error.bar(data.2.99$レベル, data.2.99$発動可否, col = 2)
    data.2.150 <- subset(data, 搭載スロット数 == 2 & レベル == 150)
    error.bar(data.2.150$レベル, data.2.150$発動可否, col = 2)
    data.3.1 <- subset(data, 搭載スロット数 == 3 & レベル == 1)
    error.bar(data.3.1$レベル, data.3.1$発動可否, col = 3)
    AIC(result)