【发布时间】:2018-10-31 18:30:59
【问题描述】:
我正在使用以下r 代码来模拟normal 数据集。我在下面复制了它们。
set.seed(1234)
ml = matrix(c(4,2,3,5,6,8,1,4,3), nrow = 3, ncol = 3)
ml #left side of parameter
[,1] [,2] [,3]
[1,] 4 5 1
[2,] 2 6 4
[3,] 3 8 3
mr = matrix(c(6,4,5,2,8,7,6,9,4), nrow = 3, ncol = 3)
mr #right side of parameter
[,1] [,2] [,3]
[1,] 6 2 6
[2,] 4 8 9
[3,] 5 7 4
n = nrow(ml)
set.seed(1234)
y.all = list()
for(j in 1:ncol(ml)){
for (i in 1:(n - 1)){
y.all[[i]] = c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
}
}
sim.data = matrix(unlist(y.all), ncol(ml)*(ncol(ml) - 1)*ncol(ml), 1, byrow = TRUE)
sim.data = matrix(sim.data, nrow = ncol(ml), ncol = nrow(sim.data)/nrow(ml))
dim(sim.data)
[1] 3 6
sim.data
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.2237461 3.889715 0.2237461 3.889715 0.2237461 3.889715
[2,] 6.0644588 3.488990 6.0644588 3.488990 6.0644588 3.488990
[3,] 6.9594941 8.088805 6.9594941 8.088805 6.9594941 8.088805
我用上面的代码模拟了上面的3X6矩阵数据集。使用ml 的1st column 和mr 的1st column 创建的sim.data 的第一个2 columns 等等。
但是,我通过以下方式单独检查了它们。不幸的是,它们并不相同。
set.seed(1234)
j = 1
i = 1
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] 2.792934 6.277429 7.084441
i = 2
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] -0.3456977 2.4291247 4.5060559
i = 3
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] 2.425260 2.453368 2.435548
set.seed(1234)
j = 2
i = 1
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] 3.792934 2.277429 3.084441
i = 2
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] 3.654302 6.429125 8.506056
i = 3
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] 7.425260 7.453368 7.435548
set.seed(1234)
j = 3
i = 1
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] -0.2070657 6.2774292 7.0844412
i = 2
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] 1.654302 4.429125 9.506056
i = 3
c(rnorm(i, ml[i, j], 1), rnorm((n - i), mr[i,j], 1))
[1] 2.425260 2.453368 2.435548
我在上面的r 代码中有什么错误吗?有没有办法模拟数据集?
提前谢谢你。
【问题讨论】:
-
我不太确定你的目标。您想以两种不同的方式模拟相同的数据集吗?为什么?
-
我也不确定我看到的哪些问题是故意的,哪些是错误。例如,在代码的高位,您模拟
y.all中的 6 个值,然后将它们复制到一个 3x6 矩阵中。 1,2 列与sim.data中的 3,4 列和 5,6 列相同是故意的还是错误?在您的第一个matrix调用中,您指定了一个 1 列矩阵,因此指定byrow = TRUE也没有任何作用。 -
总的来说,我认为这两个程序都不是很清晰或有效。如果您只是将正态分布与不同的均值混合在一起,但全部使用
var = 1,我建议您从标准正态中提取尽可能多的值,然后简单地将适当的均值添加到每个观察值中。 -
@Gregor,我的代码无法正常工作。为什么
list()被覆盖?我怎样才能避免这种情况? -
由于
y.all仅基于i而不是i和j更新,因此当j递增之前的y.all值时,将被覆盖。这可能是问题的根源......