User Tools

Site Tools


estimated_standard_deviation

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
estimated_standard_deviation [2020/12/05 18:21] – [수학적 증명] hkimscilestimated_standard_deviation [2025/08/12 20:00] (current) – [R 에서 SS값이 최소인 v값을 찾기] hkimscil
Line 11: Line 11:
  
 \begin{eqnarray*} \begin{eqnarray*}
-\hat{\sigma}^{2} \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n} +\hat{\sigma}^{2} \neq \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n} 
 \end{eqnarray*} \end{eqnarray*}
  
Line 22: Line 22:
  
 ====== 직관적 이해 ====== ====== 직관적 이해 ======
-위에서 n-1 을 사용하기 위해서 추하는 은 +분산은 $SS/df$ 라고 배웠는데, SS = Sum of Something Square라고 설명고, 여기서 Something 은 error 값이라고 (개인의 점수를 평균으로 측했을 때 틀린 만큼의 에러값) 하였다. 그리고 평균으로 예측하는 방법이 가장 작은 오차를 갖는 (예측이 들 틀리는) 방법이라고 하였다 (개인점수 중에서 평균이 제일 많이 나오므로, 평균으로 개인점수를 예측하면 제일 들 틀린다). 따라서 어느 한 집합에서 (샘플에서) 개인점수에서 평균을 빼고 이른 제곱하여 모두 더한 값은 (평균이 아닌) 다른 값으로 구한 값보다 항상 작게 된다 (최소값을 갖는다).
  
-\begin{eqnarray*} +  
-\sum_{i=1}^{n} {(X_{i}-\mu)} > \sum_{i=1}^{n} {(X_{i}-\overline{X})} +이를 그림으로도 설명할 수 있다. 아래에서 녹색의 세로선은 모집단의 평균값이고, 붉은색의 세로선은 3개로 이루어진 샘플의 평균값이다. 그리고 녹색 가로선은 3개의 샘플요소와 모집단평균과의 ($\mu$) 차이값들이고, 적색가로선은 3개의 샘플요소와 샘플평균과의 ($\overline{X}$) 차이값이다. 이 차이값들을 모아서 길이를 비교한 것이 그래프의 하단이다. 적색가로선 세개의 합이 녹색가로선 세개의 합보다 작다. 이는 샘플평균을 사용했을 때와 모집단의 평균을 사용했을 때를 비교하는 것이지만 모집단 평균외에 다른 값을 썼어도 마찬가지이다. 
-\end{eqnarray*} +
- +
-라는 점이다. 따라서 n 대신 n-1로 나눠주어서 "작은 값을 갖는 경향의 문제점을" 상쇄한다. +
- +
-아래는 20개의 원소를 갖는 k 집합을 예이다. +
-''k = {6, 4, 16, 12, 4, 13, 18, 16, 7, 11, 5, 11, 9, 11, 18, 1, 7, 2, 5, 3}'' +
- +
-우리는 이 집합의 평균과 분산값이 각각 8.95 와 27.2475 임을 알고 있다. 이 때 분산값은 24.2475는 SS값을 구한 후, 이를 N으로 나눈 값이다.  +
- +
-위의 모집단에서 3개의 샘플을 취하여 S1 = {4, 11, 18}을 얻었고, 그 평균값은 11이다. 위의 샘플에서 모집단의 분산값을 예측한다고 할 때, 모집단의 (N=20인) 평균값을 안다고 하면 우리는  +
-| s1 | mu | deviation score | ds<sup>2</sup>  +
-| 4  | 8.95  | -4.95  | 24.5025   | +
-| 11  | 8.95  | 2.05  | 4.2025   | +
-| 18  | 8.95  | 9.05  | 81.9025   | +
-|    |    | SS<sub>pop</sub>  | 110.6075 +
- +
-SS<sub>pop</sub> 값으로 110.6075 값을 얻는다. 그러나, 위의 경우는 특별한 예이고 대개의 경우 우리는 모집단의 평균값을 알지 못한다. 이 경우 우리는 3개로 취한 샘플의 평균값을 이용하여 SS 부분을 구하게 된다 (SS<sub>samp</sub>). +
- +
-| s1 | $\overline{X}$ | deviation score | ds<sup>2</sup> +
-| 4  | 11  | -7  | 49   | +
-| 11  | 11  | 0  | 0   | +
-| 18  | 11  | 7  | 49   | +
-|    |    | SS<sub>samp</sub>  | 98  | +
- +
-이렇게 얻은 SS<sub>samp</sub>값은 98인데, 이 값은 SS<sub>pop</sub> 값보다 작다. 아래의 R code는 이를 확인해 보는 작업이다. 각각의 샘플에서 (n=3) 취한 SS<sub>samp</sub> 값은 대개는 SS<sub>pop</sub>값보다 작은 경향을 띈다. 따라서 이 작은 값을 상쇄하기 위해서 n 대신 n-1 로 SS<sub>samp</sub> 값을 나누어 준다. +
- +
- +
- +
- +
-<code> +
-############ +
-set.seed(1010)  +
-n.pop <- 20 +
-k <- sample(1:20, n.pop, replace = T) +
-+
-k.mean <- mean(k)  +
-k.pvar <- var(k)*((n.pop-1)/n.pop) ## population var(k) +
-k.mean +
-k.pvar +
- +
-############ +
-n.samp <- 3 +
-ks <- sample(k, n.samp) +
-ks +
-ks.mean <- mean(ks) +
-ks.var <- var(ks) +
-ks.pvar <- var(ks)*((n.samp-1)/n.samp) +
-############ +
-ks-k.mean +
-ks-ks.mean +
-sum((ks-k.mean)^2) +
-sum((ks-ks.mean)^2) +
-</code> +
- +
-<code> +
-############ +
-set.seed(3) # another sample +
-n.samp <- 3 +
-ks <- sample(k, n.samp) +
-ks +
-ks.mean <- mean(ks) +
-ks.var <- var(ks) +
-ks.pvar <- var(ks)*((n.samp-1)/n.samp) +
-############ +
-ks-k.mean +
-ks-ks.mean +
-sum((ks-k.mean)^2) +
-sum((ks-ks.mean)^2) +
- +
-############ +
-set.seed(5) # another sample +
-n.samp <- 3 +
-ks <- sample(k, n.samp) +
-ks +
-ks.mean <- mean(ks) +
-ks.var <- var(ks) +
-ks.pvar <- var(ks)*((n.samp-1)/n.samp) +
-############ +
-ks-k.mean +
-ks-ks.mean +
-sum((ks-k.mean)^2) +
-sum((ks-ks.mean)^2) +
- +
-############ +
-set.seed(7) # another sample +
-n.samp <- 3 +
-ks <- sample(k, n.samp) +
-ks +
-ks.mean <- mean(ks) +
-ks.var <- var(ks) +
-ks.pvar <- var(ks)*((n.samp-1)/n.samp) +
-############ +
-ks-k.mean +
-ks-ks.mean +
-sum((ks-k.mean)^2) +
-sum((ks-ks.mean)^2) +
-</code> +
- +
-<code> +
-> ############ +
-> set.seed(1010)  +
-> n.pop <- 20 +
-> k <- sample(1:20, n.pop, replace = T) +
-> k +
- [1]  6  4 16 12  4 13 18 16  7 11  5 11  9 11 18  1  7  2  5  3 +
-> k.mean <- mean(k)  +
-> k.pvar <- var(k)*((n.pop-1)/n.pop) ## population var(k) +
-> k.mean +
-[1] 8.95 +
-> k.pvar +
-[1] 27.2475 +
-> ############ +
-> n.samp <- 3 +
-> ks <- sample(k, n.samp) +
-> ks +
-[1] 11 13 18 +
-> ks.mean <- mean(ks) +
-> ks.var <- var(ks) +
-> ks.pvar <- var(ks)*((n.samp-1)/n.samp) +
-> ############ +
-> ks-k.mean +
-[1] 2.05 4.05 9.05 +
-> ks-ks.mean +
-[1] -3 -1  4 +
-> sum((ks-k.mean)^2) +
-[1] 102.5075 +
-> sum((ks-ks.mean)^2) +
-[1] 26 +
-</code> +
- +
-<code> +
-> ############ +
-> set.seed(3) # another sample +
-> n.samp <- 3 +
-> ks <- sample(k, n.samp) +
-> ks +
-[1]  4 11 18 +
-> ks.mean <- mean(ks) +
-> ks.var <- var(ks) +
-> ks.pvar <- var(ks)*((n.samp-1)/n.samp) +
-> ############ +
-> ks-k.mean +
-[1] -4.95  2.05  9.05 +
-> ks-ks.mean +
-[1] -7  0  7 +
-> sum((ks-k.mean)^2) +
-[1] 110.6075 +
-> sum((ks-ks.mean)^2) +
-[1] 98 +
->  +
- +
-> ############ +
-> set.seed(5) # another sample +
-> n.samp <- 3 +
-> ks <- sample(k, n.samp) +
-> ks +
-[1]  4  5 18 +
-> ks.mean <- mean(ks) +
-> ks.var <- var(ks) +
-> ks.pvar <- var(ks)*((n.samp-1)/n.samp) +
-> ############ +
-> ks-k.mean +
-[1] -4.95 -3.95  9.05 +
-> ks-ks.mean +
-[1] -5 -4  9 +
-> sum((ks-k.mean)^2) +
-[1] 122.0075 +
-> sum((ks-ks.mean)^2) +
-[1] 122 +
- +
- +
-> ############ +
-> set.seed(7) # another sample +
-> n.samp <- 3 +
-> ks <- sample(k, n.samp) +
-> ks +
-[1] 11  5 18 +
-> ks.mean <- mean(ks) +
-> ks.var <- var(ks) +
-> ks.pvar <- var(ks)*((n.samp-1)/n.samp) +
-> ############ +
-> ks-k.mean +
-[1]  2.05 -3.95  9.05 +
-> ks-ks.mean +
-[1] -0.3333333 -6.3333333  6.6666667 +
-> sum((ks-k.mean)^2) +
-[1] 101.7075 +
-> sum((ks-ks.mean)^2) +
-[1] 84.66667 +
->  +
-</code> +
-위의 코드에서  +
-''sum%%(%%%%(%%ks-k.mean)^2) '' = $\sum({X_{i}-\mu})^{2}$ +
-''sum%%(%%%%(%%ks-ks.mean)^2) '' = $\sum({X_{i}-\overline{X}})^{2}$ +
-인데, 위의 케이스를 보면  +
- +
-''sum%%(%%%%(%%ks-k.mean)^2) '' > ''sum%%(%%%%(%%ks-ks.mean)^2) ''  즉, +
-$\sum({X_{i}-\mu})^{2} > \sum({X_{i}-\overline{X}})^{2}$ 의 경향이 있다. +
- +
-이를 그림으로 설명하면 다음과 같다. 아래에서 녹색의 세로선은 모집단의 평균값이고, 붉은색의 세로선은 3개로 이루어진 샘플의 평균값이다. 그리고 녹색 가로선은 3개의 샘플요소와 모집단평균과의 ($\mu$) 차이값들이고, 적색가로선은 3개의 샘플요소와 샘플평균과의 ($\overline{X}$) 차이값이다. 이 차이값들을 모아서 길이를 비교한 것이 그래프의 하단이다. 적색가로선 세개의 합이 녹색가로선 세개의 합보다 작다. +
 {{:pasted:20200412-002825.png?800}} {{:pasted:20200412-002825.png?800}}
  
Line 391: Line 191:
 이므로 이므로
  
-\begin{eqnarray*+\begin{align
-E[X^2] & = Var[X] + \mu^2 \\  +E\left[X^2\right] & = Var\left[X\right] + \mu^2 \nonumber \\  
-& = \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1) +& = \sigma^{2} + \mu^2 \\ 
-\end{eqnarray*}+\end{align}
  
 마찬가지로  마찬가지로 
-\begin{align*+\begin{align} 
-Var\left[\overline{X}\left[ & =  E \left[\overline{X}^2 \right] - \left[E(\overline{X})\right]^2 \\ +Var \left[ \overline{X}\right] & =  E \left[\overline{X}^2 \right] - \left[E(\overline{X})\right]^2 \nonumber \\ 
-& = E\left[\overline{X}^{2}\right] - \mu^{2} +& = E\left[\overline{X}^{2}\right] - \mu^{2} \nonumber  
-\end{align*}+\end{align}
  
 따라서 따라서
-\begin{eqnarray*+\begin{align
-E[\overline{X}^{2}]  & = Var[\overline{X}] + \mu^2 \\  +E\left[\overline{X}^{2}\right]  & = Var\left[\overline{X}\right] + \mu^2 \nonumber \\  
-& = \frac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2) +& = \frac {\sigma^{2}} {n} + \mu^{2}  
-\end{eqnarray*}+\end{align}
  
-참고로 위에서 $Var[\overline{X}] = \dfrac {\sigma^{2}} {n} $ 에 해당하는 설명은 [[:mean and variance of the sample mean]] 문서를 볼 것.+참고로 위에서 $Var\left[\overline{X}\right] = \dfrac {\sigma^{2}} {n} $ 에 해당하는 설명은 [[:mean and variance of the sample mean]] 문서를 볼 것.
  
 ---- ----
Line 415: Line 215:
 X,Y are Independent variables. X,Y are Independent variables.
  
-\begin{eqnarray*} +\begin{align*} 
-E[aX] &=a E[X] \\ +E[aX] & = a E[X] \\ 
-E[X+Y] &=E[X] + E[Y] \\ +E[X+Y] & = E[X] + E[Y] \\ 
-Var[aX] &=a^{\tiny{2}} Var[X] \\ +Var[aX] & = a^{\tiny{2}} Var[X] \\ 
-Var[X+Y] &=Var[X] + Var[Y]   +Var[X+Y] & = Var[X] + Var[Y]   
-\end{eqnarray*}+\end{align*}
  
 </WRAP> </WRAP>
 ---- ----
 우리가 알고자 하는 것은 아래의 식이 population의 parameter인 $\sigma^{2}$ 의 값과 같은가이다. 우리가 알고자 하는 것은 아래의 식이 population의 parameter인 $\sigma^{2}$ 의 값과 같은가이다.
-\begin{eqnarray*} +\begin{align*} 
-E[s^{2}] & = E \left[\frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}}{n-1} \right] \dots\dots\dots (a) \\ +E[s^{2}] & = E \left[\frac{\displaystyle\sum_{i=1}^{n}(X_{i}-\overline{X})^{2}}{n-1} \right] \qquad 
-& = \sigma^{2}  +\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot\cdot \;\(a)  \\ 
-\end{eqnarray*}+& = \sigma^{2}  
 +\end{align*}
  
 위의 식에서 일부만을 추출해서 먼저 보자. 위의 식에서 일부만을 추출해서 먼저 보자.
-\begin{eqnarray*} 
-E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = & E \left[\sum(X_{i}^{2}- 2 X_{i} \overline{X} + \overline{X}^{2})\right] \\ 
-& = & E \left[ \sum{X_{i}^2} - \sum{2X_{i} \overline{X}} + \sum {\overline{X^2}}  \right]  \\ 
-& = & E \left[ \sum{X_{i}^2} - 2 \overline{X} \sum{X_{i}} + \sum{\overline{X^2}}  \right]  \\ 
-& = & E \left[ \sum{X_{i}^2} - 2 \overline{X} \sum{X_{i}} + n \overline{X^2} \right]  \\ 
-& = & E \left[ \sum{X_{i}^2} - 2 \overline{X} \cdot (n \overline{X}) + n \overline {X^2} \right] \\ 
-& = & E \left[ \sum{X_{i}^2} - n \overline{X}^2 \right] \\ 
-& = & \sum {E(X_{i}^2)} - E(n\overline{X}^2)  \\ 
-& = & \sum {E(X_{i}^2)} - n E(\overline{X}^2)  \;\;\; \dots\dots\dots\dots\dots (3) 
-\end{eqnarray*} 
  
-한 편, 위의 (1)(2)에서 +\begin{align*} 
 +E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = E \left[\sum(X_{i}^{2}- 2 X_{i} \overline{X} + \overline{X}^{2})\right] \\ 
 +& = E \left[ \sum{X_{i}^2} - \sum{2X_{i} \overline{X}} + \sum {\overline{X^2}}  \right]  \\ 
 +& = E \left[ \sum{X_{i}^2} - 2 \overline{X} \sum{X_{i}} + \sum{\overline{X^2}}  \right]  \\ 
 +& = E \left[ \sum{X_{i}^2} - 2 \overline{X} \sum{X_{i}} + n \overline{X^2} \right]  \\ 
 +& = E \left[ \sum{X_{i}^2} - 2 \overline{X} \cdot (n \overline{X}) + n \overline {X^2} \right] \\ 
 +& = E \left[ \sum{X_{i}^2} - n \overline{X}^2 \right] \\ 
 +& = \sum {E\left(X_{i}^2\right)} - E\left(n\overline{X}^2\right)  \\ 
 +& = \sum {E\left(X_{i}^2\right)} - n E\left(\overline{X}^2\right)  \;\;\; \dots\dots\dots\dots\dots (3) 
 +\end{align*}
  
 +한 편, 위의 $(1), (2)$에서 
  
 <WRAP box> <WRAP box>
-\begin{eqnarray*} +\begin{align*} 
-E[X_{i}^{2}] & = \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1) \\ +E\left[X_{i}^{2}\right] & = \sigma^{2} + \mu^2 \;\;\; \dots\dots\dots\dots\dots (1) \\ 
-E[\overline{X}^{2}] & = \dfrac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2) +E\left[\overline{X}^{2}\right] & = \dfrac {\sigma^{2}} {n} + \mu^{2} \;\;\; \dots\dots\dots\dots\dots (2) 
-\end{eqnarray*}+\end{align*}
 </WRAP> </WRAP>
  
-위의 (1), (2)를 (3)에 대입해보면+위의 $(1), (2)$를 $(3)$에 대입해보면
  
-\begin{eqnarray*} +\begin{align*} 
-E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = \sum{E(X_{i}^{2})} - n E(\overline{X}^{2})  \\ +E \left[\sum{(X_{i}-\overline{X})^{2}} \right] & = \sum{E\left(X_{i}^{2}\right)} - n E\left(\overline{X}^{2}\right)  \\ 
-& = \sum{(\sigma^{2} + \mu^{2})} - n (\dfrac{\sigma^2}{n} + \mu^2) \\ +& = \sum{\left(\sigma^{2} + \mu^{2}\right)} - n \left(\dfrac{\sigma^2}{n} + \mu^2\right) \\ 
-& = n\sigma^{2} + n\mu^{2} - \sigma^{2} - n\mu^{2} \\ +& = n\sigma^{2} + n\mu^{2} - \sigma^{2} - n\mu^{2} \\ 
-& = (n-1) \sigma^{2}  +& = \left(n-1\right) \sigma^{2}  
-\end{eqnarray*}+\end{align*}
  
 위는 식 (a)의 일부이므로 이를 온전한 식에 대입해보면,  위는 식 (a)의 일부이므로 이를 온전한 식에 대입해보면, 
Line 478: Line 279:
 \end{eqnarray*} \end{eqnarray*}
  
 +
 +----
 만약에 우리가 population의 variance를 구하듯이 n을 이용한다고 하면,  만약에 우리가 population의 variance를 구하듯이 n을 이용한다고 하면, 
  
Line 484: Line 287:
 & = & \dfrac{1}{n} E \left[\sum{(X_{i}-\overline{X})^{2}} \right] \\ & = & \dfrac{1}{n} E \left[\sum{(X_{i}-\overline{X})^{2}} \right] \\
 & = & \dfrac{1}{n} (n-1) \sigma^{2} \\ & = & \dfrac{1}{n} (n-1) \sigma^{2} \\
-& = & (\dfrac{n-1}{n}) \sigma^{2} \\+& = & \left(\dfrac{n-1}{n}\right) \sigma^{2} \\
 \end{eqnarray*} \end{eqnarray*}
  
 즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다). 즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다).
  
-{{tag>"research methods" "조사방법론" "표준편차" "n-1" "자유도" "degrees of freedom" "n-1" "표준오차"}} 
  
 +====== R 에서 SS값이 최소인 v값을 찾기 ======
 +<code>
 +#library(ggplot2)
 +#library(ggpmisc)
 +
 +rm(list=ls())
 +rnorm2 <- function(n,mean,sd){ 
 +  mean+sd*scale(rnorm(n)) 
 +}
 +
 +# set.seed(191)
 +nx <- 20
 +mx <- 50
 +sdx <- mx * 0.15
 +x <- rnorm2(nx, mx, sdx)
 +
 +mean(x)
 +sd(x)
 +length(x)
 +hist(x)
 +
 +x.span <- seq(from = mean(x)-6*sd(x), 
 +              to = mean(x)+6*sd(x), 
 +              by = 0.1)
 +
 +residuals <- function(x, v) {
 +  return(x - v)
 +}
 +
 +ssr <- function(x, v) {
 +  residuals <- (x - v)
 +  return(sum(residuals^2))
 +}
 +
 +msr <- function(x, v) {
 +  residuals <- (x - v)
 +#  return((sum(residuals^2))/(length(x)-1))
 +  return((mean(residuals^2)))
 +}
 +
 +srs <- c() # sum of residuals
 +ssrs <- c() # sum of square residuals
 +msrs <- c() # mean square residuals = variance
 +vs <- c() # the value of v in (x - v)
 +
 +for (i in x.span) {
 +  res.x <- residuals(x,i)
 +  srs.x <- sum(res.x)  
 +  ssr.x <- ssr(x,i)
 +  msr.x <- msr(x,i)
 +  srs <- append(srs, srs.x)
 +  ssrs <- append(ssrs, ssr.x)
 +  msrs <- append(msrs, msr.x)
 +  vs <- append(vs, i)
 +}
 +plot(srs)
 +plot(msrs)
 +plot(srs)
 +
 +min(msrs)
 +min.pos.msrs <- which(msrs == min(msrs))
 +min.pos.msrs
 +print(vs[min.pos.msrs])
 +
 +plot(vs, msrs)
 +plot(vs, srs)
 +
 +
 +
 +# the above no gradient
 +# mse 값으로 계산 rather than sse 
 +# 후자는 값이 너무 커짐
 +
 +gradient <- function(x, v){
 +  residuals = x - v
 +  dx = -2 * mean(residuals)
 +  return(list("ds" = dx))
 +} # function returns ds value
 +
 +residuals <- function(x, v) {
 +  return(x - v)
 +}
 +
 +ssr <- function(x, v) {
 +  residuals <- (x - v)
 +  return(sum(residuals^2))
 +}
 +
 +msr <- function(x, v) {
 +  residuals <- (x - v)
 +  return((sum(residuals^2))/(length(x)-1))
 +#  return(mean(residuals^2))
 +}
 +
 +# pick one random v in (x-v)
 +v <- rnorm(1)
 +# Train the model with scaled features
 +learning.rate = 1e-1
 +
 +ssrs <- c()
 +msrs <- c()
 +mres <- c()
 +vs <- c()
 +# Record Loss for each epoch:
 +zx <- (x-mean(x))/sd(x)
 +
 +nlen <- 100
 +for (epoch in 1:nlen) {
 +  residual <- residuals(zx, v)
 +  ssr.x <- ssr(zx, v)
 +  msr.x <- msr(zx, v)
 +  ssrs <- append(ssrs, ssr.x)
 +  msrs <- append(msrs, msr.x)
 +  
 +  grad <- gradient(zx, v)
 +  
 +  step.v <- grad$ds * learning.rate
 +  v <- v - step.v
 +  vs <- append(vs, v)
 +}
 +
 +tail(srs)
 +tail(msrs)
 +tail(ssrs)
 +tail(vs)
 +
 +plot(srs)
 +plot(msrs)
 +plot(ssrs)
 +plot(vs)
 +# scaled
 +v
 +v.orig <- (v*sd(x))+mean(x) 
 +v.orig
 +
 +</code>
 +====== output ======
 +<code>
 +> #library(ggplot2)
 +> #library(ggpmisc)
 +
 +> rm(list=ls())
 +> rnorm2 <- function(n,mean,sd){ 
 ++   mean+sd*scale(rnorm(n)) 
 ++ }
 +
 +> # set.seed(191)
 +> nx <- 20
 +> mx <- 50
 +> sdx <- mx * 0.15
 +> x <- rnorm2(nx, mx, sdx)
 +
 +> mean(x)
 +[1] 50
 +> sd(x)
 +[1] 7.5
 +> length(x)
 +[1] 20
 +> hist(x)
 +
 +> x.span <- seq(from = mean(x)-6*sd(x), 
 ++               to = mean(x)+6*sd(x), 
 ++               by = 0.1)
 +
 +> residuals <- function(x, v) {
 ++   return(x - v)
 ++ }
 +
 +> ssr <- function(x, v) {
 ++   residuals <- (x - v)
 ++   return(sum(residuals^2))
 ++ }
 +
 +> msr <- function(x, v) {
 ++   residuals <- (x - v)
 ++ #  return((sum(residuals^2))/(length(x)-1))
 ++   return((mean(residuals^2)))
 ++ }
 +
 +> srs <- c() # sum of residuals
 +> ssrs <- c() # sum of square residuals
 +> msrs <- c() # mean square residuals = variance
 +> vs <- c() # the value of v in (x - v)
 +
 +> for (i in x.span) {
 ++   res.x <- residuals(x,i)
 ++   srs.x <- sum(res.x)  
 ++   ssr.x <- ssr(x,i)
 ++   msr.x <- msr(x,i)
 ++   srs <- append(srs, srs.x)
 ++   ssrs <- append(ssrs, ssr.x)
 ++   msrs <- append(msrs, msr.x)
 ++   vs <- append(vs, i)
 ++ }
 +> plot(srs)
 +> plot(msrs)
 +> plot(srs)
 +
 +> min(msrs)
 +[1] 53.4375
 +> min.pos.msrs <- which(msrs == min(msrs))
 +> min.pos.msrs
 +[1] 451
 +> print(vs[min.pos.msrs])
 +[1] 50
 +
 +> plot(vs, msrs)
 +> plot(vs, srs)
 +
 +
 +
 +> # the above no gradient
 +> # mse 값으로 계산 rather than sse 
 +> # 후자는 값이 너무 커짐
 +
 +> gradient <- function(x, v){
 ++   residuals = x - v
 ++   dx = -2 * mean(residuals)
 ++   return(list("ds" = dx))
 ++ } # function returns ds value
 +
 +> residuals <- function(x, v) {
 ++   return(x - v)
 ++ }
 +
 +> ssr <- function(x, v) {
 ++   residuals <- (x - v)
 ++   return(sum(residuals^2))
 ++ }
 +
 +> msr <- function(x, v) {
 ++   residuals <- (x - v)
 ++   return((sum(residuals^2))/(length(x)-1))
 ++ #  return(mean(residuals^2))
 ++ }
 +
 +> # pick one random v in (x-v)
 +> v <- rnorm(1)
 +> # Train the model with scaled features
 +> learning.rate = 1e-1
 +
 +> ssrs <- c()
 +> msrs <- c()
 +> mres <- c()
 +> vs <- c()
 +> # Record Loss for each epoch:
 +> zx <- (x-mean(x))/sd(x)
 +
 +> nlen <- 100
 +> for (epoch in 1:nlen) {
 ++   residual <- residuals(zx, v)
 ++   ssr.x <- ssr(zx, v)
 ++   msr.x <- msr(zx, v)
 ++   ssrs <- append(ssrs, ssr.x)
 ++   msrs <- append(msrs, msr.x)
 ++   
 ++   grad <- gradient(zx, v)
 ++   
 ++   step.v <- grad$ds * learning.rate
 ++   v <- v - step.v
 ++   vs <- append(vs, v)
 ++ }
 +
 +> tail(srs)
 +[1] -890 -892 -894 -896 -898 -900
 +> tail(msrs)
 +[1] 1 1 1 1 1 1
 +> tail(ssrs)
 +[1] 19 19 19 19 19 19
 +> tail(vs)
 +[1] 2.936258e-11 2.349006e-11 1.879204e-11 1.503363e-11 1.202690e-11 9.621523e-12
 +
 +> plot(srs)
 +> plot(msrs)
 +> plot(ssrs)
 +> plot(vs)
 +> # scaled
 +> v
 +[1] 9.621523e-12
 +> v.orig <- (v*sd(x))+mean(x) 
 +> v.orig
 +[1] 50
 +
 +
 +</code>
 +====== tags ======
 +{{tag>"research methods" "조사방법론" "표준편차" "n-1" "자유도" "degrees of freedom" "n-1" "표준오차"}}
  
estimated_standard_deviation.1607160118.txt.gz · Last modified: 2020/12/05 18:21 by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki