0

我在 R 中有一个变量的数据集,重复 10,000 次并在每次重复时采样 200 次,所以一个 10,000 x 200 矩阵,我想计算变量的统计矩,最多为任意数字。所以最后我想要一个包含矩值的数字向量。

我可以使用 colMean 和 colVar 获得数据集的方差和均值,但它们仅此而已。

我也知道 R 中的时刻包,但是使用 all.moments 命令会返回每个时间课程的时刻,或者将每一列或每一行视为一个单独的变量,而不是我想要的。

有谁知道高阶矩相当于 colMean 和 colVar 的?如果可能的话,还有交叉时刻?

非常感谢!

4

3 回答 3

0

R我从一个不起眼的包中偷走了这段代码e1071

theskew<- function (x) {
x<-as.vector(x)
 sum((x-mean(x))^3)/(length(x)*sd(x)^3)
 }
thekurt <- function (x) {
x<-as.vector(x)
  sum((x-mean(x))^4)/(length(x)*var(x)^2) - 3
  }

您可以通过一次输入一列将其折叠到您的代码中

于 2013-08-10T19:40:59.427 回答
0

好吧,昨天为子孙后代做了这个,这是一个循环,可以满足我的要求。

如果您的数据是您正在测量的变量的时间过程,并且您想要该变量的时刻:

rm(list=ls())

yourdata<-read.table("whereveryourdatais/and/variableyouwant")

yourdata<-t(yourdata) #only do this at your own discretion


mu<-colMeans(yourdata,1:ncol(yourdata))

NumMoments <- 5
rawmoments <- matrix(NA, nrow=NumMoments, ncol=ncol(yourdata))

for(i in 1:NumMoments) {
  rawmoments[i, ] <- colMeans(yourdata^i)
}
plot(rawmoments[1,])

holder<-matrix(NA,nrow=nrow(yourdata),ncol=ncol(yourdata))
middles<-matrix(NA,nrow=1,ncol=ncol(yourdata))

for(j in 1:nrow(yourdata)){
  for(o in 1:ncol(rawmoments)){
    middles[o]<-yourdata[j,o]-rawmoments[1,o]
  }
  holder[j,] <- middles 
}
centmoments<-matrix(NA,nrow=NumMoments,ncol=ncol(yourdata))


for(i in 1:NumMoments){
  centmoments[i,]<-colMeans(holder^i)
}

然后centmoments有中心矩和rawmoments原始矩,你可以通过改变 NumMoments 的值来指定要花多少矩。请注意,“centmoments”中的第一行大约为 0。

于 2013-08-15T12:53:56.290 回答
-1

这是你要找的吗?

X <- matrix(1:12, 3, 4) # your data

NumMoments <- 5
moments <- matrix(NA, nrow=NumMoments, ncol=ncol(X))

for(i in 1:NumMoments) {
  moments[i, ] <- colMeans(X^i)
}

编辑:好吧,显然你想要“中心时刻”

X <- matrix(1:12, 3, 4)

NumMoments <- 5
moments <- matrix(NA, nrow=NumMoments, ncol=ncol(X))

Y <- X

for(i in 1:ncol(X)) {
  Y[, i] <- Y[, i] - moments[1, i]
}

for(i in 2:NumMoments) {
  moments[i, ] <- colMeans(Y^i)
}
于 2013-08-10T15:13:32.130 回答