【julia】統計解析(線形回帰)

RDatasetsのISLRからAutoのデータを読み込み、いろいろグラフをプロットしてみてから、HorsepowerとAccelerationの関係を線形回帰してみます。

using RDatasets, Gadfly, DataFrames, DataFramesMeta, Statistics, HypothesisTests,
      Fontconfig, Cairo, GLM, Distributions, Distances, LinearAlgebra

set_default_plot_size(30cm, 8cm)

# データ読込
#RDatasets.packages()
RDatasets.datasets("ISLR")
dat = RDatasets.dataset("ISLR","Auto")

# いろいろプロットしてみる
hstack(Gadfly.plot(dat, x = :MPG, Geom.histogram()),
    Gadfly.plot(dat, x = :Cylinders, y = :MPG, Geom.boxplot), 
    Gadfly.plot(dat, x = :Horsepower, y = :Acceleration, Geom.point) )

# 線形回帰して、モデルの値(期待値)を計算し、診断プロットを描く
model = lm(@formula(Acceleration ~ Horsepower), dat)
pred = predict(model)

set_default_plot_size(16cm, 16cm)
Gadfly.plot(layer(x=dat[:Horsepower], y=dat[:Acceleration], Geom.point, Theme(default_color=color("red"))),
     layer(x=dat[:Horsepower], y=pred, Geom.line, Theme(default_color=color("blue"))), Guide.title("Horsepower vs Acceleration"),
         Guide.xlabel("Horsepower"), Guide.ylabel("Acceleration"))

# 診断プロット1:Residuals vs Fitted
set_default_plot_size(16cm, 8cm)
res = dat[:Acceleration] - pred
Gadfly.plot(x = pred, y = res, Geom.point,
         Guide.title("Residuals vs Fitted"),
         Guide.xlabel("Fitted values"), Guide.ylabel("Residuals"))

# 診断プロット2:Normal Q-Q plot
set_default_plot_size(16cm, 16cm)
m = mean(res)
N = length(res)
stdRes = (res - m * ones(N)) / (std(res)) # 標準化誤差 = (誤差-平均)/標準偏差
qx = quantile.(Normal(), range(0.5, stop=(N-0.5), length=(N)) / (N + 1))
Gadfly.plot(layer(x = qx, y = sort(stdRes), Geom.point),
         layer(x = [-3,3], y = [-3,3], Geom.line, style(line_style = [:dot])),
         Guide.title("Normal Q-Q plot"),
         Guide.xlabel("Theoretical Quantiles"),
         Guide.ylabel("Standardized residuals"))

こんなデータです。いろいろプロットしてみます。

線形回帰してみますと。

残渣を見てみます。

こちらのサイト「Julia でふつうの統計解析」を参考にさせていただきました。

Add a Comment

メールアドレスが公開されることはありません。