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:57] – [수학적 증명] hkimscilestimated_standard_deviation [2025/08/12 20:00] (current) – [R 에서 SS값이 최소인 v값을 찾기] hkimscil
Line 293: Line 293:
  
  
 +====== R 에서 SS값이 최소인 v값을 찾기 ======
 +<code>
 +#library(ggplot2)
 +#library(ggpmisc)
  
-{{tag>"research methods" "조사방법론" "표준편차" "n-1" "자유도" "degrees of freedom" "n-1" "표준오차"}}+rm(list=ls()) 
 +rnorm2 <- function(n,mean,sd) 
 +  mean+sd*scale(rnorm(n))  
 +}
  
-====== R 에서 SS값이 최소인 v값을 찾기 ======+# 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.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.1754996267.txt.gz · Last modified: 2025/08/12 19:57 by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki