我在变量R中得到一个数据集,重复10,000次,每次重复采样200次,所以10,000乘200矩阵,我想计算变量的统计矩,直到任意数。所以最后我想要一个包含瞬间值的数字向量。
我可以使用colMean和colVar获取数据集的方差和均值,但它们只能到目前为止。
我也知道R中的时刻包,但是使用all.moments命令会返回每个时间段的时刻,或者将每个列或行视为单个变量,而不是我想要的。
有没有人知道高阶矩的colMean和colVar的等价物?如果可能的话也可以用于交叉时刻?
非常感谢!
答案 0 :(得分: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
}
您可以通过一次送入一列来将其折叠到您的代码中
答案 1 :(得分: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的值来指定要拍摄的时刻。
请注意&#34; centmoments&#34;中的第一行将大约为0。
答案 2 :(得分:-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)
}