Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R的蒙特卡罗模拟:排序和重要性问题_R_Montecarlo_Significance - Fatal编程技术网

使用R的蒙特卡罗模拟:排序和重要性问题

使用R的蒙特卡罗模拟:排序和重要性问题,r,montecarlo,significance,R,Montecarlo,Significance,我尝试使用蒙特卡罗模拟实现以下统计测试。该方法基于以下文件: 详情: 上述文件使用蒙特卡罗模拟计算了两个时期(1961-1983年和1984-2000年)平均值差异的显著性,这两个时期的热带气旋通过频率不是正态分布 这应该是一个双尾测试 提供了以下步骤: 一,。首先,编制了9999个随机排序的40年台风通过频率时间序列 二,。计算前23年1961-1983年的平均值减去后17年的平均值 三,。根据10000个样本之间原始差值的等级,估计显著性水平 这是我到目前为止所拥有的 假设我有以下数据集。

我尝试使用蒙特卡罗模拟实现以下统计测试。该方法基于以下文件:

详情:

上述文件使用蒙特卡罗模拟计算了两个时期(1961-1983年和1984-2000年)平均值差异的显著性,这两个时期的热带气旋通过频率不是正态分布

这应该是一个双尾测试

提供了以下步骤:

一,。首先,编制了9999个随机排序的40年台风通过频率时间序列

二,。计算前23年1961-1983年的平均值减去后17年的平均值

三,。根据10000个样本之间原始差值的等级,估计显著性水平

这是我到目前为止所拥有的

假设我有以下数据集。这些列表示每年的计数,而为了简单起见,这里的行表示纬度坐标数

A<-matrix(floor(runif(100,min=0,max=20)),nrow=5,ncol=40)
colnames(A)<-c("X1961","X1962","X1963","X1964","X1965","X1966","X1967","X1968","X1969","X1970","X1971","X1972","X1973","X1974","X1975","X1976","X1977","X1978","X1979","X1980","X1981","X1982","X1983","X1984","X1985","X1986","X1987","X1988","X1989","X1990","X1991","X1992","X1993","X1994","X1995","X1996","X1997","X1998","X1999","X2000")

set.seed(1)
rand <- sample(nrow(A),9999,replace=TRUE)
A[rand,]
原件:

A[1,]

X1961 X1962 X1963 X1964 X1965 X1966 X1967 X1968 X1969 X1970 X1971 X1972 
X1973 
18     1     6     7     3    12    19     0    17    17     0    10    
16 
X1974 X1975 X1976 X1977 X1978 X1979 X1980 X1981 X1982 X1983 X1984 X1985 
X1986 
3     4     0    15     8    17     1    18     1     6     7     3    
12 
X1987 X1988 X1989 X1990 X1991 X1992 X1993 X1994 X1995 X1996 X1997 X1998 
X1999 
19     0    17    17     0    10    16     3     4     0    15     8    
17 
X2000 
1 
预期产量*

我想在这个测试的原始矩阵中添加一个pvalue列。显著性测试应按行进行。当然,这可以通过使用apply函数来实现

问题


我如何实施第三个条件? 此外,在蒙特卡罗测试中,步骤1的顺序是否重要

我觉得我误解了步骤1,我应该使用replicate吗?像这样的

rand<-replicate(40,sample(nrow(A),9999,replace=T))
有没有关于如何正确执行此操作的建议


我将非常感谢您的帮助。

此代码将解决您的问题。如果必须对大量数据执行此操作,则可以轻松地将其与包“foreach”和“doParallel”并行。此函数用于获取数据并对两个数据块进行nrep采样,然后获取平均值的差异。计算均值差的FDP,然后查看数据均值差的百分位,得到p值

  my.fun <- function(x,nrep = 1000,breakpoint){
    # x is the data
    # nrep is the amount of simulations
    # breakpoint is where the breakpoint is
    set.seed(12345)
    a_sim <- vector(mode = 'double', length = nrep)
    n <- length(x)
    for(i in 1:nrep){
      aux1 <- sample(x,size = breakpoint,replace = T)
      aux2 <- sample(x,size = n-breakpoint,replace = T)
      a_sim[i] <- abs(mean(aux1) - mean(aux2))
    }
    cum_dist_func <- ecdf(a_sim)
    p <- 1-cum_dist_func(abs(mean(x[1:breakpoint])-mean(x[(breakpoint+1):n])))

    return(p)
  }


  pvalue <- apply(X = A,MARGIN = 1,FUN = my.fun,breakpoint = 23 )
  A <- cbind(A,pvalue)

我如何实施第三个条件?算法是什么?@Roland..关于第三个条件,我也不确定。它刚刚提到,从原始差值的秩。我很抱歉对这次考试缺乏了解。这也是我第一次做蒙特卡罗测试。我已经试着引导你们:问一个关于交叉验证的特定问题来理解这句话。如果你在R方面需要帮助,请回来。非常感谢!
  my.fun <- function(x,nrep = 1000,breakpoint){
    # x is the data
    # nrep is the amount of simulations
    # breakpoint is where the breakpoint is
    set.seed(12345)
    a_sim <- vector(mode = 'double', length = nrep)
    n <- length(x)
    for(i in 1:nrep){
      aux1 <- sample(x,size = breakpoint,replace = T)
      aux2 <- sample(x,size = n-breakpoint,replace = T)
      a_sim[i] <- abs(mean(aux1) - mean(aux2))
    }
    cum_dist_func <- ecdf(a_sim)
    p <- 1-cum_dist_func(abs(mean(x[1:breakpoint])-mean(x[(breakpoint+1):n])))

    return(p)
  }


  pvalue <- apply(X = A,MARGIN = 1,FUN = my.fun,breakpoint = 23 )
  A <- cbind(A,pvalue)