R을 이용한 최소 제곱법에 의한 단일 회귀 분석

8595 단어 R

개요



R을 이용한 간단한 단회귀의 함수입니다.


위 그림과 같이 여러 좌표에서 가장 가장 좋은 선을 그릴 수 있습니다.

메인 코드



min.sq 는 구하는 직선의 기울기와 절편을 냅니다.
least.sq는 원하는 직선과 중심화된 직선을 묘사합니다.

least.R
# min.sq -----------------------------------------------------------

min.sq <- function(x, y){
  x.bar = mean(x)
  y.bar = mean(y)
  beta.1 = sum((x-x.bar)*(y-y.bar))/sum((x-x.bar)^2)
  beta.0 = y.bar-beta.1*x.bar
  return(list(a = beta.1, b = beta.0))
}

# least.sq ----------------------------------------------------------------

least.sq <- function(x, y) {
  minSq = min.sq(x, y)
  abline(minSq$b, minSq$a, col="red")
  x = x-mean(x)
  y = y-mean(y)
  minSq = min.sq(x, y)
  abline(minSq$b, minSq$a, col="blue")
}

사용 예



사용하려면 x 좌표와 Y 좌표를 다음과 같이 함수에 전달합니다. 이 예에서는 정규 분포에 따른 난수를 전달합니다.

sampleScript
# sampleData --------------------------------------------------------------

X <- rnorm(n = 15, mean = 0, sd = 1)
Y <- rnorm(n = 15, mean = 10, sd = 20)

# graph -------------------------------------------------------------------

plot(X,Y)
abline(h=0)
abline(v=0)

# code --------------------------------------------------------------------

least.sq(X, Y)
print(min.sq(X, Y))


출력 결과



난수로 시도하고 있기 때문에 위의 예에서는 할 때마다 결과가 바뀝니다만, 대체로 이러한 그래프를 얻을 수 있습니다.

또한 다음과 같은 결과를 얻을 수 있습니다. $a는 기울이고 $b는 절편을 의미합니다. 이 값을 이용하여 임의의 x에서 y 좌표를 구할 수 있습니다.
> print(min.sq(X, Y))
$a
[1] 4.860327

$b
[1] 3.854344

요약



상관계수를 구하는 식과 거의 같네요. 파이썬이나 Java 등 다른 언어로 작성해 보는 것도 재미있을지도 모릅니다.

좋은 웹페이지 즐겨찾기