我有一个计数数据向量强烈过度分散和零膨胀.
矢量看起来像这样:
i.vec=c(0,63,1,4,1,44,2,2,1,0,1,0,0,0,0,1,0,0,3,0,0,2,0,0,0,0,0,2,0,0,0,0,
0,0,0,0,0,0,0,0,6,1,11,1,1,0,0,0,2)
m=mean(i.vec)
# 3.040816
sig=sd(i.vec)
# 10.86078
Run Code Online (Sandbox Code Playgroud)
我想为此分配一个,我强烈怀疑这将是一个零膨胀的泊松(ZIP).但是我需要进行显着性测试来证明ZIP分布符合数据.
如果我有正态分布,我可以使用包vcd中的函数goodfit()进行卡方拟合优度测试,但我不知道我可以对零膨胀数据执行的任何测试.
您好,并提前感谢您的帮助!
我试图生成一个具有特定数量的值的向量,这些值是根据概率分布分配的.例如,我想要一个长度为31的向量,包含26个零和5个.(向量的总和应该总是五.)但是,这些的位置很重要.为了确定哪个值应该是1,哪个值应该为零,我有一个概率向量(长度为31),如下所示:
probs<-c(0.01,0.02,0.01,0.02,0.01,0.01,0.01,0.04,0.01,0.01,0.12,0.01,0.02,0.01,
0.14,0.06,0.01,0.01,0.01,0.01,0.01,0.14,0.01,0.07,0.01,0.01,0.04,0.08,0.01,0.02,0.01)
Run Code Online (Sandbox Code Playgroud)
我可以根据这个分布选择值,并使用rbinom获得长度为31的向量,但我不能精确选择五个值.
Inv=rbinom(length(probs),1,probs)
Inv
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
再次感谢!
这是一个奇怪的问题,但我认为这里的人可能会感兴趣.
是否可以让R导致在另一个程序中打开文件?例如,您是否可以编写一个命令行来导致音乐文件开始播放?潜在的应用是在模型运行完毕后,音乐将开始播放,提醒您模型的完成.
谢谢您的帮助!
非常感谢你的帮助!
我正在尝试修改现有矩阵,以便在将新行添加到矩阵时,它会从预先存在的矩阵中删除值.
例如,我有矩阵:
[,1] [,2] [,3] [,4]
1 1 0 0
0 1 0 0
1 0 1 0
0 0 1 1
Run Code Online (Sandbox Code Playgroud)
我想添加另一个矢量,I.vec,它有两个值(I.vec=c(0,1,1,0)).这很容易做到.我只是将它与矩阵联系起来.现在,对于I.vec等于1的每一列,我想从其他行中随机选择一个值并使其为零.理想情况下,这将最终得到一个矩阵,如:
[,1] [,2] [,3] [,4]
1 0 0 0
0 1 0 0
1 0 0 0
0 0 1 1
0 1 1 0
Run Code Online (Sandbox Code Playgroud)
但是每次运行迭代时,我都希望它再次随机采样.
所以这就是我尝试过的:
mat1<-matrix(c(1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,1),byrow=T, nrow=4)
I.vec<-c(0,1,1,0)
mat.I<-rbind(mat1,I.vec)
mat.I.r<-mat.I
d1<-mat.I[,which(mat.I[5,]==1)]
mat.I.r[sample(which(d1[1:4]==1),1),which(mat.I[5,]==1)]<-0
Run Code Online (Sandbox Code Playgroud)
但这只删除了我想要删除的两个值中的一个.我也尝试过对矩阵进行子集化的变化,但我还没有成功.
再次感谢你!
我有另一个问题,那里的聪明人(这个网站是如此上瘾).
我在矩阵上运行一些模拟,为此目的我已经嵌套了for循环.第一个创建一个向量,每次循环循环时增加一个向量.嵌套循环通过随机化向量,将其附加到矩阵,并计算新矩阵的一些简单属性来运行模拟.(例如,我使用了在模拟中不会改变的属性,但在实践中我需要模拟来了解随机向量的影响.)嵌套循环运行100次模拟,最终我只想要列是那些模拟的手段.
这是一些示例代码:
property<-function(mat){ #where mat is a matrix
a=sum(mat)
b=sum(colMeans(mat))
c=mean(mat)
d=sum(rowMeans(mat))
e=nrow(mat)*ncol(mat)
answer=list(a,b,c,d,e)
return(answer)
}
x=matrix(c(1,0,1,0, 0,1,1,0, 0,0,0,1, 1,0,0,0, 1,0,0,1), byrow=T, nrow=5, ncol=4)
obj=matrix(nrow=100,ncol=5,byrow=T) #create an empty matrix to dump results into
for(i in 1:ncol(x)){ #nested for loops
a=rep(1,times=i) #repeat 1 for 1:# columns in x
b=rep(0,times=(ncol(x)-length(a))) #have the rest of the vector be 0
I.vec=append(a,b) #append these two for the I vector
for (j in 1:100){
I.vec2=sample(I.vec,replace=FALSE) #randomize I vector
temp=rbind(x,I.vec2)
prop<-property(temp)
obj[[j]]<-prop
}
write.table(colMeans(obj), 'myfile.csv', quote …Run Code Online (Sandbox Code Playgroud) 我有一个大矩阵,我想从中随机提取一个较小的矩阵.(我想这样做1000次,所以最终它会在for循环中.)比如说我有这个9x9矩阵:
mat=matrix(c(0,0,1,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,
0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,
1,0,1,0,0,0,0,0,1,0,1,0,0,0,1), nrow=9)
Run Code Online (Sandbox Code Playgroud)
从这个矩阵,我想要一个随机的3x3子集.诀窍是我不希望最终矩阵中的任何行或列总和为0.另一个重要的是我需要知道最终矩阵中行和列的原始数量.因此,如果我最终随机选择第4,5和7行以及第1,3和8列,我希望在最终矩阵中可以轻松访问这些标识符.
这是我到目前为止所做的.
首先,我创建一个行号和列号的向量.我试图将这些附加到矩阵中.
r.num<-seq(from=1,to=nrow(mat),by=1) #vector of row numbers
c.num<-seq(from=0, to=(ncol(mat)+1),by=1) #vector of col numbers (adj for r.num)
mat.1<-cbind(r.num,mat)
mat.2<-rbind(c.num,mat.1)
Run Code Online (Sandbox Code Playgroud)
现在我有一个带标识符的10x10矩阵.我可以通过创建随机向量并对矩阵进行子集来选择我的行.
rand <- sample(r.num,3)
temp1 <- rbind(mat.2[1,],mat.2[rand,]) #keep the identifier row
Run Code Online (Sandbox Code Playgroud)
这很好用!现在我想随机选择3列.这是我遇到麻烦的地方.我尝试以同样的方式做到这一点.
rand2 <- sample(c.num,3)
temp2 <- cbind(temp1[,1],temp1[,rand2])
Run Code Online (Sandbox Code Playgroud)
问题是我最终会得到一些0的行和列和.我可以先消除总和为0的列.
temp3 <- temp1[,which(colSums(temp1[2:nrow(temp1),])>0)]
cols <- which(colSums(temp1[2:nrow(temp1),2:ncol(temp1)])>0)
rand3 <- sample(cols,3)
temp4 <- cbind(temp3[,1],temp3[,rand3])
Run Code Online (Sandbox Code Playgroud)
但我最终得到一条错误消息.出于某种原因,R不喜欢以这种方式对矩阵进行子集化.
所以我的问题是,有没有更好的方法在删除零列之后用随机向量"rand3"对矩阵进行子集化或者有更好的方法来随机选择三个互补的行和列,这样就没有任何总和来0?
非常感谢你的帮助!
r ×6
matrix ×2
distribution ×1
loops ×1
object ×1
probability ×1
sampling ×1
subset ×1
vector ×1