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 [2025/09/30 06:07] – [직관적 이해] hkimscilestimated_standard_deviation [2026/03/11 01:56] (current) – [실험적, R에서 시뮬레이션으로 이해] hkimscil
Line 5: Line 5:
  
 \begin{eqnarray*} \begin{eqnarray*}
-\hat{\sigma^{2}} = \dfrac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\mu)}} {n} +\widehat{\sigma^2} = \dfrac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\mu)}} {n} 
 \end{eqnarray*} \end{eqnarray*}
  
Line 11: Line 11:
  
 \begin{eqnarray*} \begin{eqnarray*}
-\hat{\sigma}^{2} \neq \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n} +\widehat{\sigma^2} \neq \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n} 
 \end{eqnarray*} \end{eqnarray*}
  
 \begin{eqnarray*} \begin{eqnarray*}
-\hat{\sigma}^{2} = \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n-1} +\widehat{\sigma^2} = \frac {\displaystyle\sum_{i=1}^{n}{(X_{i}-\overline{X})}} {n-1} 
 \end{eqnarray*} \end{eqnarray*}
  
Line 22: Line 22:
  
 ====== 직관적 이해 ====== ====== 직관적 이해 ======
-분산은 $ \text{SS}/ \text{df} $ 라고 배웠다. SS = Sum of Something Square라고 설명하고, 여기서 Something 은 error (개인의 점수를 평균으로 추측했을 때 틀린 만큼의 에러값) 하였다. 이렇게 평균을 가지고 개인점수를 예측하는 것이 가장 작은 오차를 갖는 방법이라고 하였다 (개인점수 중에서 평균이 제일 많이 나오므로, 평균으로 개인점수를 예측하면 제일 들 틀린다). 따라서 어느 한 집합에서 (샘플에서) 개인점수에서 평균을 빼고 이를 제곱하여 모두 더한 값은 (평균이 아닌) 다른 값으로 구한 값보다 항상 작게 된다 (최소값을 갖는다).+분산은 $ \text{SS}/ \text{df} $ 라고 배웠다. SS = Sum of Something Square라고 설명하고, 여기서 Something 은 error (개인의 점수를 평균으로 추측했을 때 틀린 만큼의 에러값) 하였다. 이렇게 평균을 가지고 개인점수를 예측하는 것이 가장 작은 오차를 갖는 방법이라고 하였다 (개인점수 중에서 평균이 제일 많이 나오므로, 평균으로 개인점수를 예측하면 제일 들 틀린다). 따라서 어느 한 집합에서 (샘플에서) 개인점수에서 평균을 빼고 이를 제곱하여 모두 더한 값은 (평균이 아닌) 다른 값으로 구한 값보다 항상 작게 된다 (최소값을 갖는다).  
 + 
 +이것이 의미하는 것은 샘플의 평균으로 분산을 구하면 분자에 해당하는 SS값이 최소값이 되어 버리므로 예측하는 분산의 숫자가 항상 너무 작은 숫자가 되어 버린다.
    
 이를 그림으로도 설명할 수 있다. 아래에서 녹색의 세로선은 모집단의 평균값이고, 붉은색의 세로선은 3개로 이루어진 샘플의 평균값이다. 그리고 녹색 가로선은 3개의 샘플요소와 모집단평균과의 ($\mu$) 차이값들이고, 적색가로선은 3개의 샘플요소와 샘플평균과의 ($\overline{X}$) 차이값이다. 이 차이값들을 모아서 길이를 비교한 것이 그래프의 하단이다. 적색가로선 세개의 합이 녹색가로선 세개의 합보다 작다. 이는 샘플평균을 사용했을 때와 모집단의 평균을 사용했을 때를 비교하는 것이지만 모집단 평균외에 다른 값을 썼어도 마찬가지이다.  이를 그림으로도 설명할 수 있다. 아래에서 녹색의 세로선은 모집단의 평균값이고, 붉은색의 세로선은 3개로 이루어진 샘플의 평균값이다. 그리고 녹색 가로선은 3개의 샘플요소와 모집단평균과의 ($\mu$) 차이값들이고, 적색가로선은 3개의 샘플요소와 샘플평균과의 ($\overline{X}$) 차이값이다. 이 차이값들을 모아서 길이를 비교한 것이 그래프의 하단이다. 적색가로선 세개의 합이 녹색가로선 세개의 합보다 작다. 이는 샘플평균을 사용했을 때와 모집단의 평균을 사용했을 때를 비교하는 것이지만 모집단 평균외에 다른 값을 썼어도 마찬가지이다. 
Line 44: Line 46:
 > >
 </code> </code>
-{{:pasted:20250930-145429.png?600}}+{{:pasted:20250930-150655.png?800}}
 붉은 선 s1 평균 (10) 붉은 선 s1 평균 (10)
 초록 선 모집단 평균 12 (혹은 그냥 12 가치라고 해도 됨) 초록 선 모집단 평균 12 (혹은 그냥 12 가치라고 해도 됨)
Line 52: Line 54:
 초록 선에서 세개 검은 선까지의 길이는 6, 3, 3이 되고 이를 더하면 12 초록 선에서 세개 검은 선까지의 길이는 6, 3, 3이 되고 이를 더하면 12
  
-{{:pasted:20250930-150655.png?800}} 
  
 ====== 실험적, R에서 시뮬레이션으로 이해 ====== ====== 실험적, R에서 시뮬레이션으로 이해 ======
 아래 output의 코멘트를 읽을 것 아래 output의 코멘트를 읽을 것
 +<tabbox rs01>
 <code> <code>
 rm(list=ls()) rm(list=ls())
Line 135: Line 137:
 vs[min.pos.msrs] vs[min.pos.msrs]
 </code> </code>
-===== output =====+<tabbox ro01>
 <WRAP group> <WRAP group>
-<WRAP half column>+<WRAP column 55%>
 <code> <code>
 > rm(list=ls()) > rm(list=ls())
Line 164: Line 166:
 </code> </code>
 </WRAP> </WRAP>
-<WRAP half column>+<WRAP column 35%>
 SS = sum(x-mean(x))^2 인데, mean(x)을 즉, x집합의 평균을, x 원소값을 예측하는데 (빼는데) 사용하면 SS값이 최소값이 된다고 하였다. 이것을 R에서 simulation으로 알아보기 위해서 mean(x) 대신에 다른 숫자들을 넣어보려고 한다. 이를 v라고 하면 sum(x-v)^2이라는 SS값들을 구해서 비교하려는 것이다. 대입할 숫자들은 (v) mean(x) +- 3 sd(x) 를 범위로 하고, 그 범위의 시작 숫자에서 (시작은 mean(x)-3sd(x)가 된다) 0.1씩 증가시키면서 대입하고, 각 숫자마다 (처음 숫자는 35, 다음 숫자는 35.1 . . . ) SS값을 구해서 저장하여 그것을 그래프로 그려보고 최소값이 어떤 것인지 보는 것이 진행하려는 작업이다.  SS = sum(x-mean(x))^2 인데, mean(x)을 즉, x집합의 평균을, x 원소값을 예측하는데 (빼는데) 사용하면 SS값이 최소값이 된다고 하였다. 이것을 R에서 simulation으로 알아보기 위해서 mean(x) 대신에 다른 숫자들을 넣어보려고 한다. 이를 v라고 하면 sum(x-v)^2이라는 SS값들을 구해서 비교하려는 것이다. 대입할 숫자들은 (v) mean(x) +- 3 sd(x) 를 범위로 하고, 그 범위의 시작 숫자에서 (시작은 mean(x)-3sd(x)가 된다) 0.1씩 증가시키면서 대입하고, 각 숫자마다 (처음 숫자는 35, 다음 숫자는 35.1 . . . ) SS값을 구해서 저장하여 그것을 그래프로 그려보고 최소값이 어떤 것인지 보는 것이 진행하려는 작업이다. 
  
Line 173: Line 175:
  
 <WRAP group> <WRAP group>
-<WRAP half column>+<WRAP column 55%>
 <code> <code>
 > x.span <- seq(from = mean(x)-3*sd(x),  > x.span <- seq(from = mean(x)-3*sd(x), 
Line 215: Line 217:
 </code> </code>
 </WRAP> </WRAP>
-<WRAP half column>+<WRAP column 35%>
 x-mean(x) = residual = error  x-mean(x) = residual = error 
 sum(residual^2) = SS (sum of square) sum(residual^2) = SS (sum of square)
Line 227: Line 229:
  
 <WRAP group> <WRAP group>
-<WRAP half column>+<WRAP column 55%>
 <code> <code>
  
Line 251: Line 253:
 </code> </code>
 </WRAP> </WRAP>
-<WRAP half column>+<WRAP column 35%>
   * 이 후 쓸 function들. (x-v) = residual이라고 부르니까 이 residual을 모으는 function   * 이 후 쓸 function들. (x-v) = residual이라고 부르니까 이 residual을 모으는 function
   * function ssr = x 집합과 v값 (x.span의 한 숫자)를 인수를 주었을 때 구할 수 있는 Sum of Square값들 (실제로는 사용하지 않는다. 대신 msr 펑션으로 MS값을 구한다).   * function ssr = x 집합과 v값 (x.span의 한 숫자)를 인수를 주었을 때 구할 수 있는 Sum of Square값들 (실제로는 사용하지 않는다. 대신 msr 펑션으로 MS값을 구한다).
Line 259: Line 261:
  
 <WRAP group> <WRAP group>
-<WRAP half column>+<WRAP column 55%>
 <code> <code>
 > ssrs <- c() # sum of square residuals > ssrs <- c() # sum of square residuals
Line 284: Line 286:
 </code> </code>
 </WRAP> </WRAP>
-<WRAP half column>+ 
 +<WRAP column 35%>
 comment comment
   * x.span의 처음값인 35.1을 넣어서 (x-v)를 구한 후    * x.span의 처음값인 35.1을 넣어서 (x-v)를 구한 후 
Line 301: Line 304:
  
 <WRAP group> <WRAP group>
-<WRAP half column>+<WRAP column 55%>
 <code> <code>
 > # v값이 x.span에 따라서 변화하여 대입되었을 때의 > # v값이 x.span에 따라서 변화하여 대입되었을 때의
Line 371: Line 374:
 </code> </code>
 </WRAP> </WRAP>
-<WRAP half column>+<WRAP column 35%>
 comment comment
   * msrs값에 저장된 msr값들 (mean square residual값들) 중에서   * msrs값에 저장된 msr값들 (mean square residual값들) 중에서
Line 381: Line 384:
  
 <WRAP group> <WRAP group>
-<WRAP half column>+<WRAP column 55%>
 <code> <code>
 > # 아래는 위에서 계산한 msr 값들을 저장한 msrs값들 중에서 최소값이 되는 것을 찾은  > # 아래는 위에서 계산한 msr 값들을 저장한 msrs값들 중에서 최소값이 되는 것을 찾은 
Line 407: Line 410:
 </code> </code>
 </WRAP> </WRAP>
-<WRAP half column>+<WRAP column 35%>
 comment comment
   * msrs 의 min(msrs)값을 찾는다 24.975   * msrs 의 min(msrs)값을 찾는다 24.975
Line 419: Line 422:
 </WRAP> </WRAP>
  
 +
 +</tabbox>
 +
 +
 +===== 미분으로 기울기가 최소값이 될 때를 찾는 법 =====
  
 다음으로 MS값을 구하는 식인  다음으로 MS값을 구하는 식인 
Line 450: Line 458:
 <del>[[why n-1 gradient explanation]] <del>[[why n-1 gradient explanation]]
 </del> </del>
-<code+<tabbed
-# the above no gradient +  * *estimated_standard_deviation/rscript02 
- +  * estimated_standard_deviation/rout02 
-gradient <- function(x, v){ +</tabbed>
-    residuals = x - v +
-    # y = (sum(x-v)^2)/n 혹은 (mean(x-v)^2)  +
-    # 의 식이 ms값을 구하는 식인데  +
-    # 이를 v에 대해서 미분하면 chain rule을 써야 한다 +
-    # 자세한 것은 http://commres.net/wiki/estimated_standard_deviation +
-    # 문서 중에 미분 부분 참조 +
-    # dy/dv = ( 2(x-v)*-1 ) / n chain rule +
-    # dy/dv = -2 (x-v) / n = -2 (mean(residual))  +
-    dx = -2 mean(residuals) +
-    # return(list("ds" = dx)) +
-    return(dx) +
-} # function returns ds value +
- +
-zx <- (x-mean(x))/sd(x) +
-# pick one random v in (x-v) +
-v <- rnorm(1) +
- +
-# Train the model with scaled features +
-learning.rate = 1e-1 +
- +
-msrs <- c() +
-vs <- c() +
- +
-nlen <- 75 +
-for (epoch in 1:nlen) { +
-    residual <- residuals(zx, v) +
-    msr.x <- msr(zx, v) +
-    msrs <- append(msrs, msr.x) +
-     +
-    grad <- gradient(zx, v) +
-    step.v <- grad * learning.rate #  +
-    v <- v - step.v # 그 다음 v값 +
-    vs <- append(vs, v) # v값 저장 +
-+
- +
-tail(msrs) +
-tail(vs) +
- +
-plot(vs, msrs, type='b'+
- +
-# scaled +
-vs # 변화하는 v 값들의 집합  +
-vs.orig <- (vs*sd(x))+mean(x)  +
-vs.orig +
- +
-# 마지막 v값이 최소값에 근접한 값 +
-v  +
-v.orig <- (v*sd(x))+mean(x)  +
-v.orig +
- +
-plot(vs.orig, msrs, type='b'+
- +
-</code> +
-===== output ===== +
-<WRAP group> +
-<WRAP half column> +
-<code> +
-> # the above no gradient +
->  +
-> gradient <- function(x, v){ +
-+     residuals = x - v +
-+     # y = (sum(x-v)^2)/n 혹은 (mean(x-v)^2)  +
-+     # 의 식이 ms값을 구하는 식인데  +
-+     # 이를 v에 대해서 미분하면 chain rule을 써야 한다 +
-+     # 자세한 것은 http://commres.net/wiki/estimated_standard_deviation +
-+     # 문서 중에 미분 부분 참조 +
-+     # dy/dv = ( 2(x-v)*-1 ) / n chain rule +
-+     # dy/dv = -2 (x-v) / n = -2 (mean(residual))  +
-+     dx = -2 * mean(residuals) +
-+     # return(list("ds" = dx)) +
-+     return(dx) +
-+ } # function returns ds value +
->  +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-+
-</code> +
-</WRAP> +
- +
-<WRAP half column> +
-comment +
-이 R script의 목적은 v값이 최소값이 되는 지점을 자동적으로 찾아보려는 것이다. 이것을 위해서 우선 v값으로 사용할 첫 점수를 랜덤하게 구한 후 (아래 그래프에서 빨간색 지점), 자동적으로 그 다음 v 점수를 찾고 (녹색지점), 그 다음 v 점수를 찾고 (황금색 지점), . . . 이런 과정을 계속하면서 각 v 점수에서의 msr값을 구해서 이에 해당하는 v값을 찾아 보려고 한다. 빨간색, 녹색, 황금색, . . . 이를 자동적으로 구하기 위해서 두가지 방법을 사용하는데 그 것이 +
-  * gradient function과 +
-  * learning_rate 값이다.  +
-gradient 펑션은 dy/dv 의 연쇄 미분식인 ([[:chain rules]]) -2(x-v) / n = -2 mean(res) 값을 구하는 것이다. 이렇게 구한 값에 learning_rate값을 곱한후, 이것을 먼저 사용한 v값에서 (빨간색 지점) 빼 주어 다음 v값으로 (녹색지점) 사용하려고 한다. 이 녹색지점에서의 v값을 사용했을 때의 gradient값을 구한 후 다시 이값에 learning_rate인 0.1을 곱하여 그다음 스텝의 값을 얻고, 이 값을 바로 전의 v값에서 빼 준 값을 그 다음 v값으로 사용한다. 이렇게 구하는 v값들은 0.1씩 곱해주는 효과때문에 오른 쪽으로 옮겨가는 지점이 "<fc #ff0000>**점진적으로 줄어들게 되고**</fc>" 이 지점이 msr의 최소값이 되는 지점으로 가게 된다.  +
- +
-{{:pasted:20250905-202627.png}} +
-클릭하면 큰 이미지로 볼 수 있음 +
-</WRAP> +
-</WRAP> +
- +
-<WRAP group> +
-<WRAP half column> +
-<code> +
-> zx <- (x-mean(x))/sd(x) +
-> # pick one random v in (x-v) +
-> v <- rnorm(1) +
->  +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-+
-</code> +
-</WRAP> +
-<WRAP half column> +
-comment +
-  * 랜덤하게 v값을 찾음 ''v <- rnorm(1)''  +
-  * 원래는 mean(x)값 근처의 값을 랜덤하게 골라야 하므로 +
-  * ''v <- rnorm(1, mean(x), sd(x))'' 와 같이 써야 하지만 (현재의 경우, '' rnorm(1, 50, 5) ''가 된다)  +
-  * 그렇게 하질 않고 x 집합의 원소들을 표준점수화 한 후 '' zx <- (x-mean(x))/sd(x) '' (이렇게 표준점수화 하면 x 변인의 평균이 0, 표준편차가 1 이 되는 집합으로 변한다) +
-  * '' v <- rnorm(1, 0, 1) ''로 구한다. 뒤의 인자인 0, 1 은 default이모로 생략. +
-  * 이렇게 하는 이유는 혹시 나중에 다른 x집합에 똑같은 작업을 하더라도 그 집합의 평균과 표준편차를 사용하지 않고 +
-  * 단순히 '' rnorm(1)'' 을 이용해서 찾으려고 하는 것이다.  +
- +
-</WRAP> +
-</WRAP> +
- +
-<WRAP group> +
-<WRAP half column> +
-<code> +
-> # Train the model with scaled features +
-> learning.rate = 1e-1 +
->  +
-</code> +
-</WRAP> +
-<WRAP half column> +
-comment +
-  * 이 0.1은 gradient function으로 구한 해당 v값에 대한 y 미분값을 (기울기 값을) 구한 후, 여기에 곱하기 위해서 지정한다. +
- +
-</WRAP> +
-</WRAP> +
- +
- +
-<WRAP group> +
-<WRAP half column> +
-<code> +
-> msrs <- c() +
-> vs <- c() +
->  +
-> nlen <- 75 +
-> for (epoch in 1:nlen) { +
-+     residual <- residuals(zx, v) +
-+     msr.x <- msr(zx, v) +
-+     msrs <- append(msrs, msr.x) +
-+      +
-+     grad <- gradient(zx, v) +
-+     step.v <- grad * learning.rate #  +
-+     v <- v - step.v # 그 다음 v값 +
-+     vs <- append(vs, v) # v값 저장 +
-+ } +
->  +
-> tail(msrs) +
-[1] 0.999 0.999 0.999 0.999 0.999 0.999 +
-> tail(vs) +
-[1] 6.415945e-08 5.132756e-08 4.106205e-08 3.284964e-08 2.627971e-08 2.102377e-08 +
->  +
-> plot(vs, msrs) +
->  +
->  +
-</code> +
-</WRAP> +
-<WRAP half column> +
-comment +
-  * nlen는 그냥 자의적으로 지정한다. 여기서는 75로 했다. +
-  * for 문에서 처음 v값은 위에서 랜덤으로 구한 값이다 (v). +
-  * 이 v값으로 gradient 펑션의 아웃풋 값을 구하고 (-2(residual)) = ''grad <- gradient(x, v)'' +
-  * 이 값에 learning_rate값을 곱한 값을 구하여 ''step.v <- grad * learaning_rate'' +
-  * 이 값을 원래 v값에서 빼준 후에  +
-  * 다시 (for 문에서 반복하는 동안) v값으로 바꾼 후 '' v <- v - step.v ''  +
-  * for문을 nlen번 만큼 반복한다.     +
-  * 이 과정에서 저장한  +
-  * msr값들과  +
-  * vs값들의 마지막 6개를 살펴본다.  +
-  * v 값으로 x집합의 평균값을 사용하는 것이 최소 msr값이 된다는 것이 맞다면  +
-  * v 값은 0이 될것이다 (왜냐하면 x집합을 zx로 바꿨기 때문에, 즉 평균이 0이고 sd값이 1일 집합으로 바꿨기 때문에)  +
-  * 아래 그래프의 각 포인트는 v값의 이동을 나타내는데 grad*learning_rate의 영향으로 점진적으로 하가하여 최소값으로 도달한다. +
- +
-{{:pasted:20250905-214631.png}} +
-</WRAP> +
-</WRAP> +
- +
- +
-<WRAP group> +
-<WRAP half column> +
-<code> +
-> # scaled +
-> vs # 변화하는 v 값들의 집합  +
- [1] 3.119260e-01 2.495408e-01 1.996326e-01 1.597061e-01 1.277649e-01 1.022119e-01 8.176952e-02 +
- [8] 6.541561e-02 5.233249e-02 4.186599e-02 3.349279e-02 2.679424e-02 2.143539e-02 1.714831e-02 +
-[15] 1.371865e-02 1.097492e-02 8.779935e-03 7.023948e-03 5.619158e-03 4.495327e-03 3.596261e-03 +
-[22] 2.877009e-03 2.301607e-03 1.841286e-03 1.473029e-03 1.178423e-03 9.427383e-04 7.541907e-04 +
-[29] 6.033525e-04 4.826820e-04 3.861456e-04 3.089165e-04 2.471332e-04 1.977066e-04 1.581652e-04 +
-[36] 1.265322e-04 1.012258e-04 8.098061e-05 6.478449e-05 5.182759e-05 4.146207e-05 3.316966e-05 +
-[43] 2.653573e-05 2.122858e-05 1.698286e-05 1.358629e-05 1.086903e-05 8.695226e-06 6.956181e-06 +
-[50] 5.564945e-06 4.451956e-06 3.561565e-06 2.849252e-06 2.279401e-06 1.823521e-06 1.458817e-06 +
-[57] 1.167054e-06 9.336428e-07 7.469143e-07 5.975314e-07 4.780251e-07 3.824201e-07 3.059361e-07 +
-[64] 2.447489e-07 1.957991e-07 1.566393e-07 1.253114e-07 1.002491e-07 8.019931e-08 6.415945e-08 +
-[71] 5.132756e-08 4.106205e-08 3.284964e-08 2.627971e-08 2.102377e-08 +
-> vs.orig <- (vs*sd(x))+mean(x)  +
-> vs.orig +
- [1] 51.55963 51.24770 50.99816 50.79853 50.63882 50.51106 50.40885 50.32708 50.26166 50.20933 +
-[11] 50.16746 50.13397 50.10718 50.08574 50.06859 50.05487 50.04390 50.03512 50.02810 50.02248 +
-[21] 50.01798 50.01439 50.01151 50.00921 50.00737 50.00589 50.00471 50.00377 50.00302 50.00241 +
-[31] 50.00193 50.00154 50.00124 50.00099 50.00079 50.00063 50.00051 50.00040 50.00032 50.00026 +
-[41] 50.00021 50.00017 50.00013 50.00011 50.00008 50.00007 50.00005 50.00004 50.00003 50.00003 +
-[51] 50.00002 50.00002 50.00001 50.00001 50.00001 50.00001 50.00001 50.00000 50.00000 50.00000 +
-[61] 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 50.00000 +
-[71] 50.00000 50.00000 50.00000 50.00000 50.00000 +
->  +
-> # 마지막 v값이 최소값에 근접한 값 +
-> v  +
-[1] 2.102377e-08 +
-> v.orig <- (v*sd(x))+mean(x)  +
-> v.orig +
-[1] 50 +
-+
-> plot(vs.orig, msrs, type='b'+
->  +
->  +
->  +
-</code> +
-</WRAP> +
-<WRAP half column> +
-comment +
-{{:pasted:20250905-231742.png}} +
- +
-만약에 처음에 구한 랜덤 v값이 평균의 오른 쪽에있었더라면, 아래 그림과 같이 평균에 접근했을 것이다. +
-{{:pasted:20250905-231513.png}} +
-</WRAP> +
-</WRAP>+
  
  
estimated_standard_deviation.1759212449.txt.gz · Last modified: by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki