全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2337 3
2011-04-12
有一个6300*240的矩阵
要求算它的6300行的spatial depth
大概运算过程是这样的
1.
U[ij]=(Xj-Xi)/||Xj-Xi||, i,jЄ{1,...,n},i不等于j
2.
Vi=(1/(n-1))∑U[ij] for j from 1 to n, j不等于i
3.
The Sample depth at Xi is obtained as
D(Xi, Fn)=1-||Vi||
下面是我写的循环
大概运行到U[j,]=(T2-T1)/(sum((T2-T1)*(T2-T1))^0.5) 这步就显示阵里的下标数目不对
本人R初学者,希望各位大侠不吝赐教
若嫌问题过于简单,还望海涵!
library(Matrix)
DataSD=function(Data){
TimeSeries=Data
U=matrix(nrow=6300,ncol=240)
V=matrix(nrow=6300,ncol=240)
D=matrix(nrow=6300,ncol=1)
for(i in 1:nrow(TimeSeries)){
for(j in 1:nrow(TimeSeries)){
if(i==j){
U[j,]=rep(0,length=240)}
else{
T1=TimeSeries[i,2:ncol(TimeSeries)]
T2=TimeSeries[j,2:ncol(TimeSeries)]
U[j,]=(T2-T1)/(sum((T2-T1)*(T2-T1))^0.5)
}
}
V[i,]=(1/(n-1))*colSums(U$Vector[i,],na.rm=TRUE)
D[i,]=1-(sum(V[i,]*V[i,]))^0.5
}
return(list(U=U,V=V,D=D))
}
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-4-12 23:01:28
你的TimeSeries是240列
T1和T2都是239列,然后你又赋值给240列的U,所以就出错了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-4-13 04:59:34
我的数据Timeseires第一列是location所以是241行的 2# qoiqpwqr
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-4-14 17:30:10
library(foreach)
A <- 63
B <- 24
TimeSeries <- abs(matrix(rnorm(A*B),A,B)*10)+10
UU <- foreach(T2=iapply(TimeSeries,1),.combine="rbind") %:% foreach(T1=iapply(TimeSeries,1),.combine="rbind") %do% {
  T2-T1
}
U <- foreach(a=iapply(UU,1),.combine="rbind") %do% {
  a/crossprod(a)^0.5
}
K <- seq(1,A * A,A)
V <- foreach(a=K,.combine="rbind") %do% {
   colSums(U[a:(a+A-1),],na.rm=TRUE)
}
D <- 1-apply(V,1,function(x) crossprod(x)^0.5)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群