小编Lau*_*ura的帖子

在R中拟合零膨胀泊松分布

我有一个计数数据向量强烈过度分散和零膨胀.

矢量看起来像这样:

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()进行卡方拟合优度测试,但我不知道我可以对零膨胀数据执行的任何测试.

r distribution

11
推荐指数
1
解决办法
7426
查看次数

通过概率分布分配特定数量的值(在R中)

您好,并提前感谢您的帮助!

我试图生成一个具有特定数量的值的向量,这些值是根据概率分布分配的.例如,我想要一个长度为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 vector probability

7
推荐指数
3
解决办法
1680
查看次数

R可以导致另一个程序打开文件吗?

这是一个奇怪的问题,但我认为这里的人可能会感兴趣.

是否可以让R导致在另一个程序中打开文件?例如,您是否可以编写一个命令行来导致音乐文件开始播放?潜在的应用是在模型运行完毕后,音乐将开始播放,提醒您模型的完成.

谢谢您的帮助!

r externalinterface

7
推荐指数
3
解决办法
413
查看次数

在添加向量后在随机选择现有矩阵中的值(在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)

但这只删除了我想要删除的两个值中的一个.我也尝试过对矩阵进行子集化的变化,但我还没有成功.

再次感谢你!

r matrix sampling

5
推荐指数
1
解决办法
1169
查看次数

将for循环的结果分配给空矩阵

我有另一个问题,那里的聪明人(这个网站是如此上瘾).

我在矩阵上运行一些模拟,为此目的我已经嵌套了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)

loops r object

5
推荐指数
1
解决办法
3万
查看次数

选择R中随机向量指定的列

我有一个大矩阵,我想从中随机提取一个较小的矩阵.(我想这样做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 matrix subset random-sample

5
推荐指数
1
解决办法
1514
查看次数