My Notes

統計学とかR(R言語)とかPython3の覚え書きとか走り書きとか。 座右の銘にしたい: All work and no play makes Jack a dull boy.

単回帰分析 対応するデータから予測 R(R言語)で

Rコード

# 対応するデータからの予測 単回帰分析
新生児体重と胎盤重量 <- data.frame(No = 1:10,
                                新生児体重x = c(3470, 2550, 2920, 2530, 3280,
                                            2840, 2520, 3350, 3610, 3430),
                                胎盤重量y = c(760, 490, 580, 520, 550,
                                            480, 400, 560, 590, 530))

新生児体重と胎盤重量


summary(新生児体重と胎盤重量)



# 新生児体重xが説明変数(独立変数)
# 胎盤重量yが目的変数(従属変数)
x <- 新生児体重と胎盤重量$新生児体重x
y <- 新生児体重と胎盤重量$胎盤重量y


# 相関
par(family = "Osaka") # 文字化けするなら。
plot(x, y, xlab = "新生児体重x", ylab = "胎盤重量y", main = "新生児体重と胎盤重量")
cor(x, y)
cor.test(x, y)


# 単回帰
lm1 <- lm(y ~ x, data = 新生児体重と胎盤重量)
lm1
s <- summary(lm1)
s
# (全体的に考えさせられる数値が出るが、以下続ける)
# 回帰直線
abline(lm1)


# 予測値, 残差
予測値 <- predict(lm1)
残差 <- residuals(lm1)
data.frame(新生児体重と胎盤重量, 予測値, 残差)


# 回帰診断図
par(mfrow = c(2, 2), oma = c(2, 2, 2, 1), mar = c(4, 4, 3, 2))
plot(lm1)


# 体重が3100gの赤ちゃんの胎盤重量を予測
#
# 切片と傾き
intercept_and_x <- round(coef(lm1), 2)
intercept_and_x


# 切片の値
b <- intercept_and_x[[1]]
b


# 傾きの値
a <- intercept_and_x[[2]]
a


# 予測値
pred_y <- a*3100 + b
pred_y

R Console

> # 対応するデータからの予測 単回帰分析
> 新生児体重と胎盤重量 <- data.frame(No = 1:10,
+                                 新生児体重x = c(3470, 2550, 2920, 2530, 3280,
+                                             2840, 2520, 3350, 3610, 3430),
+                                 胎盤重量y = c(760, 490, 580, 520, 550,
+                                             480, 400, 560, 590, 530))
> 
> 新生児体重と胎盤重量
   No 新生児体重x 胎盤重量y
1   1        3470       760
2   2        2550       490
3   3        2920       580
4   4        2530       520
5   5        3280       550
6   6        2840       480
7   7        2520       400
8   8        3350       560
9   9        3610       590
10 10        3430       530
> 
> 
> summary(新生児体重と胎盤重量)
       No         新生児体重x     胎盤重量y    
 Min.   : 1.00   Min.   :2520   Min.   :400.0  
 1st Qu.: 3.25   1st Qu.:2622   1st Qu.:497.5  
 Median : 5.50   Median :3100   Median :540.0  
 Mean   : 5.50   Mean   :3050   Mean   :546.0  
 3rd Qu.: 7.75   3rd Qu.:3410   3rd Qu.:575.0  
 Max.   :10.00   Max.   :3610   Max.   :760.0  
> 
> 
> 
> # 新生児体重xが説明変数(独立変数)
> # 胎盤重量yが目的変数(従属変数)
> x <- 新生児体重と胎盤重量$新生児体重x
> y <- 新生児体重と胎盤重量$胎盤重量y
> 
> 
> # 相関
> par(family = "Osaka") # 文字化けするなら。
> plot(x, y, xlab = "新生児体重x", ylab = "胎盤重量y", main = "新生児体重と胎盤重量")
> cor(x, y)
[1] 0.6728118
> cor.test(x, y)

    Pearson's product-moment correlation

data:  x and y
t = 2.5723, df = 8, p-value = 0.03301
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.07492541 0.91487764
sample estimates:
      cor 
0.6728118 

> 
> 
> # 単回帰
> lm1 <- lm(y ~ x, data = 新生児体重と胎盤重量)
> lm1

Call:
lm(formula = y ~ x, data = 新生児体重と胎盤重量)

Coefficients:
(Intercept)            x  
    96.0152       0.1475  

> s <- summary(lm1)
> s

Call:
lm(formula = y ~ x, data = 新生児体重と胎盤重量)

Residuals:
   Min     1Q Median     3Q    Max 
-72.06 -37.72 -30.10  42.48 152.03 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept)  96.01525  176.47188   0.544    0.601  
x             0.14754    0.05736   2.572    0.033 *
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 73.44 on 8 degrees of freedom
Multiple R-squared:  0.4527, Adjusted R-squared:  0.3843 
F-statistic: 6.617 on 1 and 8 DF,  p-value: 0.03301

> # (全体的に考えさせられる数値が出るが、以下続ける)
> # 回帰直線
> abline(lm1)
> 
> 
> # 予測値, 残差
> 予測値 <- predict(lm1)
> 残差 <- residuals(lm1)
> data.frame(新生児体重と胎盤重量, 予測値, 残差)
   No 新生児体重x 胎盤重量y   予測値      残差
1   1        3470       760 607.9651 152.03489
2   2        2550       490 472.2320  17.76799
3   3        2920       580 526.8203  53.17968
4   4        2530       520 469.2813  50.71871
5   5        3280       550 579.9333 -29.93328
6   6        2840       480 515.0174 -35.01744
7   7        2520       400 467.8059 -67.80593
8   8        3350       560 590.2608 -30.26080
9   9        3610       590 628.6202 -38.62015
10 10        3430       530 602.0637 -72.06367
> 
> 
> # 回帰診断図
> par(mfrow = c(2, 2), oma = c(2, 2, 2, 1), mar = c(4, 4, 3, 2))
> plot(lm1)
> 
> 
> # 体重が3100gの赤ちゃんの胎盤重量を予測
> #
> # 切片と傾き
> intercept_and_x <- round(coef(lm1), 2)
> intercept_and_x
(Intercept)           x 
      96.02        0.15 
> 
> 
> # 切片の値
> b <- intercept_and_x[[1]]
> b
[1] 96.02
> 
> 
> # 傾きの値
> a <- intercept_and_x[[2]]
> a
[1] 0.15
> 
> 
> # 予測値
> pred_y <- a*3100 + b
> pred_y
[1] 561.02

散布図のスクリーンショット

f:id:my_notes:20170610011133p:plain

回帰直線のスクリーンショット

f:id:my_notes:20170610011205p:plain

回帰診断図のスクリーンショット

f:id:my_notes:20170610011235p:plain

参考文献

(参考にしたデータ)

すぐわかる統計解析

すぐわかる統計解析

(参考にした解説)

統計クイックリファレンス 第2版

統計クイックリファレンス 第2版

(参考にしたRコードと解説)

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

(なお、『Rによるデータサイエンス』は新版が出ている)

こちらの記事の方がデータがいいと思われる

my-notes.hatenablog.com