在R语言中,逆变换法和伪随机数是否有明显差别呢?

Python014

在R语言中,逆变换法和伪随机数是否有明显差别呢?,第1张

R里的伪随机数怎么取的不得而知,但逆变换法应该是在分布函数已知的情况下最方便的做法吧。

我们从最简单的指数分布来测试吧。方法1用逆变换,方法2用伪随机也就是R里的built-in.

最后比较每种方法和各自,还有和对方的最大绝对值差值的分布。

方法1:

invF <- function(x){ log(1/(1-x))}

D <- vector()

for (i in 1:100){

    a <- runif(1e4) # 两组1万个0-1均匀分布随机数

    b <- runif(1e4)

    ran1 <- sapply(a, invF)

    ran2 <- sapply(b, invF)

    D <- c(D, max(abs(ran1 - ran2)))

}

summary(D)

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

7.651   9.100   9.762   9.875  10.540  13.940

方法2:

D <- vector()

for (i in 1:100){

    a <- rexp(1e4, rate = 1) # 两组1万个参数为1的指数分布随机数

    b <- rexp(1e4, rate = 1)

    D <- c(D, max(abs(a - b)))

}

summary(D)

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

7.765   8.977   9.574   9.727  10.590  12.540

两种方法混合:a是逆变换,b是伪随机

invF <- function(x){ log(1/(1-x))}

D <- vector()

for (i in 1:100){

    a <- runif(1e4)          # 1万个0-1均匀分布随机数

    b <- rexp(1e4, rate = 1) # 1万个参数为1的指数分布随机数

    ran1 <- sapply(a, invF)

    D <- c(D, max(abs(ran1 - b)))

}

summary(D)

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

7.679   8.701   9.385   9.536  10.150  13.610

有没有发现。。根本没什么不同。

x<-c(127.3,130.0,132.7,129.4,135.0,137.1,141.1,142.8,145.5,145.3,

148.3,146.4,150.2,153.1,157.3,160.7,164.2,165.6,168.7,172.0)

y<-c(20.96,21.40,21.96,21.52,22.39,22.76,23.48,23.66,24.10,24.01,

24.54,24.28,25.00,25.64,26.46,26.98,27.52,27.78,28.24,28.78)

shuju<-data.frame(x,y)

shuju.reg<-lm(y~x)

summary(shuju.reg)  #(1)建立回归方程

shuju.res

#自相关性

#图形诊断自相关性

shuju.res1<-shuju.res[1:length(shuju.res)-1]   

shuju.res2<-shuju.res[2:length(shuju.res)]

plot(shuju.res1,shuju.res2)   #e(t)与e(t-1)作图

#统计量诊断自相关性

library(car)

durbinWatsonTest(shuju.reg)

#迭代法

acf.1<-acf(shuju.res) #计算各阶自相关系数acf.1acf.1$acf[[2]]

rhohat <- 1-0.6632531/2rhohat 

newy<-y[2:length(y)]-rhohat*y[1:length(y)-1]

newx<-x[2:length(y)]-rhohat*x[1:length(y)-1]

new.reg<-lm(newy~newx)

summary(new.reg)

durbinWatsonTest(new.reg) 

#差分法

diffy <- diff(y)

diffx <- diff(x)

diff.reg <- lm(diffy~diffx-1)

summary(diff.reg)

durbinWatsonTest(diff.reg)

在r语言中,识别回归分析异常点的r函数有[m,n]=size(x);输入的变量x只是个二维的。

数据读取的方法,这里用的file.choose( ),这样做的好处是,会弹出窗口让你选择你要加载进来的文件,免去了输入路径的苦恼。R语言只学习了数据输入,及一些简单的处理,图形可视化部分尚未学习。

R是一种可编程的语言

作为一个开放的统计编程环境,语法通俗易懂,很容易学会和掌握语言的语法。而且学会之后,我们可以编制自己的函数来扩展现有的语言。这也就是为什么它的更新速度比一般统计软件,如SPSS、SAS等快得多。大多数最新的统计方法和技术都可以在R中直接得到。