の続きです。
今回は、TotalexFn, 金融を除いた全体のデータを見てみましょう。
まずは、データフレームの始めの10行を表示して、TotalexFnのLevelを確認しましょう。head関数を使います。
TotalexFnのLevelは3ですね。絞り込みます。
Level(3列目)とType(4列目)は必要ないので、削除します。
データはすべて数値型ですね。
今回は、lm関数を使って、回帰分析の練習をしてみます。
Statistics: An Introduction Using R (English Edition)
- 作者: Michael J. Crawley
- 出版社/メーカー: Wiley
- 発売日: 2014/09/23
- メディア: Kindle版
- この商品を含むブログを見る
この本を参考にしてみます。
PERと一番相関の強い変数で線形単回帰分析をしてみます。cor関数で相関を調べましょう。
Incomeが一番(負の)相関が強いですね。IncomeでPERを回帰しましょう。
まずは、グラフを作成します。
右肩下がりのグラフですね。
lm関数で線形単回帰モデルを作成します。
PER = 3.40e+01 - 5.43e-05 * Income という回帰式です。
3.40e+01は34です。5.43e-05は0.0000543です。
なので、PER = 34 - 0.0000543 * Income です。
さきほどのグラフにこのモデルの直線を重ねてみます。abline関数です。
このグラフにさらに、観測値(青い点)と予測値(緑の直線)の差分のラインを引いてみましょう。まず、predict関数を使って予測値のベクトルを用意します。
次にfor関数を使います。
summary関数でmodel1の基本データを表示します。
こんどはIncomeを対数変換した値で線形回帰してみましょう。
まずは、Incomeを対数変換したベクトルを用意します。
このlogIncomeを使ってlm関数でモデルを作成します。
R-squaredが0.8644とmodel1の0.8111よりも良くなっています。
散布図と回帰直線を重ねてみます。
もうひとつ、PERも対数変換したモデルも試してみましょう。
こうしてPERを対数変換したベクトルを用意しました。
R-squaredが0.8488なので、model2よりは悪いですね。散布図と回帰直線を重ねます。
最後にPERとIncomeの散布図にmodel1, model2, model3の回帰線を重ねてみましょう。
散布図はplot関数、model1の回帰直線はabline関数、model2とmodel3の回帰線はcureve関数で描きます。
今回は以上です。
次回は
です。
今回のR言語のコードです。
# データフレームの始めの10行を表示
head(df, 10)
# TotalexFnだけのデータフレームを作成
df3 <- df[df$Type == "TotalexFn", ]
str(df3)
summary(df3)
# LevelとTypeを削除
df3 <- df3[ , -c(3, 4)]
str(df3)
summary(df3)
# PERとの相関関係
cor(df3, df3$PER)
# PERとIncomeのグラフ
plot(df3$Income, df3$PER, pch = 21, bg = "blue")
# lm関数で線形単回帰モデル
model1 <- lm(PER ~ Income, data = df3)
model1
# PERとIncomeのグラフと回帰直線
plot(df3$Income , df3$PER, pch = 21, bg = "blue")
abline(model1, col = "green")
# 予測値のベクトルを用意
fitted <- predict(model1)
# PERとIncomeのグラフと回帰直線と残差
plot(df3$Income, df3$PER, pch = 21, bg = "blue")
abline(model1, col = "green")
for (i in 1:length(fitted))
lines(c(df3$Income[i], df3$Income[i]), c(df3$PER[i], fitted[i]), col = "red")
# summary関数
summary(model1)
# Incomeを対数変換したベクトル
logIncome <- log(df3$Income)
# Incomeを対数変換したモデル
model2 <- lm(df3$PER ~ logIncome)
summary(model2)
# 散布図と回帰直線
plot(logIncome, df3$PER, pch = 21, bg = "blue")
abline(model2, col = "red")
# PERを対数変換したベクトル
logPER <- log(df3$PER)
# PER, Incomeともに対数変換したモデル
model3 <- lm(logPER ~ logIncome)
summary(model3)
# 散布図と回帰直線
plot(logIncome, logPER, pch = 21, bg = "blue")
abline(model3, col = "orange")
# 散布図とmodel1, model2, model3
xhani <- range(df3$Income) # X軸の範囲
yhani <- range(df3$PER) # Y軸の範囲
plot(df3$Income, df3$PER, pch = 21, bg = "blue", xlab = "", ylab = "", main = "",
xlim = xhani, ylim = yhani) # 散布図
abline(model1, col = "red", lwd = 3) # model1の回帰直線
par(new = TRUE)
curve(165.1504 -11.6929 * log(x), from = xhani[1], to = xhani[2],
col = "green", lwd = 3, xlab = "", ylab = "", main = "",
xlim = xhani, ylim = yhani) # model2の回帰曲線
par(new = TRUE)
curve(exp(9.45722 -0.5219 * log(x)), from = xhani[1], to = xhani[2],
col = "yellow", lwd = 3, xlab = "Income", ylab = "PER",
main = "Red:Model1, Green:Model2, Yellow:Model3", xlim = xhani, ylim = yhani)
# model3の回帰曲線