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/08/12 19:58] – [R 에서 SS값이 최소인 v값을 찾기] hkimscilestimated_standard_deviation [2025/08/12 20:00] (current) – [R 에서 SS값이 최소인 v값을 찾기] hkimscil
Line 292: Line 292:
 즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다). 즉, 원래 $\sigma^2$ 값보다 조금 작은 값을 갖게 될 것이다 (이를 biased result라고 한다).
  
- 
- 
-{{tag>"research methods" "조사방법론" "표준편차" "n-1" "자유도" "degrees of freedom" "n-1" "표준오차"}} 
  
 ====== R 에서 SS값이 최소인 v값을 찾기 ====== ====== R 에서 SS값이 최소인 v값을 찾기 ======
Line 432: Line 429:
  
 </code> </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.1754996295.txt.gz · Last modified: 2025/08/12 19:58 by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki