だめな例

発散しまくってしまう。本質的に同じことをしているはずなのに。うーん。

y <- function(x1,x2,x3,a0,a1,a2,a3){
  return(a0 + a1*x1 + a2*x2 + a3*x3)
}

deda0 <- function(y,x1,x2,x3,a0,a1,a2,a3){
  -2/15 * sum((y-y(x1,x2,x3,a0,a1,a2,a3)))
}

deda1 <- function(y,x1,x2,x3,a0,a1,a2,a3){
  -2/15 * sum((y-y(x1,x2,x3,a0,a1,a2,a3)) * x1) 
}

deda2 <- function(y,x1,x2,x3,a0,a1,a2,a3){
  -2/15 * sum((y-y(x1,x2,x3,a0,a1,a2,a3)) * x2) 
}

deda3 <- function(y,x1,x2,x3,a0,a1,a2,a3){
  -2/15 * sum((y-y(x1,x2,x3,a0,a1,a2,a3)) * x3) 
}

students[c(-1,-2)]<- students[c(-1,-2)]/100
students

#てきとーな初期値とパラメータ
a0 <- 1
a1 <- 1
a2 <- 1
a3 <- 1
alpha <- 10

for(i in seq(1000)){
  a0 <- a0 - alpha * deda0(students$ボール投げ,students$握力,students$身長,students$体重,a0,a1,a2,a3)
  a1 <- a1 - alpha * deda1(students$ボール投げ,students$握力,students$身長,students$体重,a0,a1,a2,a3)
  a2 <- a2 - alpha * deda2(students$ボール投げ,students$握力,students$身長,students$体重,a0,a1,a2,a3)
  a3 <- a3 - alpha * deda3(students$ボール投げ,students$握力,students$身長,students$体重,a0,a1,a2,a3)
}

a0
a1
a2
a3

lm(ボール投げ~握力+身長+体重,data=students)