R中的顺序函数

时间:2014-06-08 21:44:31

标签: r statistics

我有兴趣验证模拟数据的Weak Law of Large Numbers。我的想法是生成一个观察向量并按顺序取样本平均值,首先进行1次观察,然后进行2,3,...,n。为此,我写下了以下功能:

n <- 10000
x <- rnorm(n)
xn <- function(n) {
   xn <- mean(x[1:n])
   list(xn) 
}

然后我想绘制样本均值与n对n = 1,...,n,但不幸的是我不知道该怎么做。我一直(天真地)尝试代码:

y <- c(1:n)
plot(y, xn(y))

这是我一直在犯的错误

Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' and 'y' lengths differ
In addition: Warning message:
In 1:n : numerical expression has 1000 elements: only the first used

你可以帮我解决最后一部分吗?

2 个答案:

答案 0 :(得分:4)

您可以有效地计算累积均值&#39;通过cumsum()函数,然后按1:n进行矢量化除法:

n <- 10000
set.seed(101)
x <- rnorm(n)
cx <- cumsum(x)
cm <- cx/(1:n)
plot(1:n,cm,type="l")

答案 1 :(得分:3)

Ben Bolker的解决方案效率更高,但您可以通过以下方式修复原始代码。 问题是你的函数需要一个元素而不是一个向量/元素列表,所以你必须使用sapply将它应用于y中的每个元素。

n <- 10000
x <- rnorm(n)
xn <- function(n) {
    xn <- mean(x[1:n])
}
y <- 1:n
plot(y, sapply(y, xn))