小编Ste*_*rdi的帖子

自举分层/多级数据(重采样群集)

我正在生成一个脚本,用于从cats数据集(从-MASS-包中)创建bootstrap样本.

根据Davidson和Hinkley教科书[1],我进行了一个简单的线性回归,并采用了一个基本的非参数程序,用于从iid观察引导,即对重新采样.

原始样本的形式如下:

Bwt   Hwt

2.0   7.0
2.1   7.2

...

1.9    6.8
Run Code Online (Sandbox Code Playgroud)

通过单变量线性模型,我们想通过他们的大脑重量来解释猫的重量.

代码是:

library(MASS)
library(boot)


##################
#   CATS MODEL   #
##################

cats.lm <- glm(Hwt ~ Bwt, data=cats)
cats.diag <- glm.diag.plots(cats.lm, ret=T)


#######################
#   CASE resampling   #
#######################

cats.fit <- function(data) coef(glm(data$Hwt ~ data$Bwt)) 
statistic.coef <- function(data, i) cats.fit(data[i,]) 

bootl <- boot(data=cats, statistic=statistic.coef, R=999)
Run Code Online (Sandbox Code Playgroud)

现在假设存在一个聚类变量cluster = 1, 2,..., 24(例如,每只猫属于一个给定的垃圾).为简单起见,假设数据是平衡的:我们对每个簇有6个观察值.因此,24窝中的每一只由6只猫组成(即n_cluster = 6n = 144).

可以通过以下方式创建伪cluster变量:

q <- …
Run Code Online (Sandbox Code Playgroud)

r hierarchical-clustering statistics-bootstrap

14
推荐指数
1
解决办法
4585
查看次数

使用replicate()或sapply()重复用户定义的函数

我定义了一个自定义函数,如下所示:

my.fun = function() {

      for (i in 1:1000) {
      ...
        for (j in 1:20) {
          ...
        }
      }

 return(output)

}
Run Code Online (Sandbox Code Playgroud)

返回一个输出矩阵,output由1000行和20列组成.

我需要做的是重复这个函数说5次并将五个output结果存储到一个全新的矩阵中,比如说final,但不使用另一个for循环(这样可以使代码更清晰,也是因为在第二个时刻我我想尝试并行化这些额外的5次重复).

因此final应该是一个包含5000行和20列的矩阵(这5次重复的基本原理是在我使用的两个for循环中,以及其他函数中sample).

我尝试使用final <- replicate(5, my.fun()),正确计算了五个重复,但后来我必须"手动"将元素放入一个全新的5000 x 20矩阵中......有更好的方式吗?(也许用sapply()?).非常感谢

r replicate sapply

10
推荐指数
3
解决办法
2万
查看次数

R中的标准差之间/之内

在处理分层/多级/面板数据集时,采用一个返回可用变量的组内和组间标准差的包可能非常有用。

Stata通过以下命令可以轻松完成以下数据操作

xtsum, i(momid)
Run Code Online (Sandbox Code Playgroud)

我进行了研究,但找不到任何R可以做到这一点的软件包。

编辑:

为了解决问题,分层数据集的示例可能是这样的:

son_id       mom_id      hispanic     mom_smoke     son_birthweigth

  1            1            1            1              3950
  2            1            1            0              3890
  3            1            1            0              3990
  1            2            0            1              4200
  2            2            0            1              4120
  1            3            0            0              2975
  2            3            0            1              2980
Run Code Online (Sandbox Code Playgroud)

每个母亲(较高级别)有两个或更多儿子(较低级别)的事实给出了“多级”结构。因此,每个母亲都定义了一组观察结果。

因此,每个数据集变量可以在母亲之间和母亲之间或仅在母亲之间变化。birtweigth母亲之间会有所不同,但同一位母亲之间也会有所不同。而是hispanic固定为同一个母亲。

例如,母体内部方差son_birthweigth为:

# mom1 means
    bwt_mean1 <- (3950+3890+3990)/3
    bwt_mean2 <- (4200+4120)/2
    bwt_mean3 <- (2975+2980)/2

# Within-mother variance for birthweigth
    ((3950-bwt_mean1)^2 + (3890-bwt_mean1)^2 + …
Run Code Online (Sandbox Code Playgroud)

r hierarchical-data multi-level stata

6
推荐指数
1
解决办法
2220
查看次数

以区间格式重新整形宽数据集

我正在研究一个"宽"数据集,现在我想使用一个特定的包(-msSurv-对于非参数多态模型),它需要间隔形式的数据.

我当前的数据集的特征是每个人占一行:

dat <- read.table(text = "

   id    cohort   t0    s1     t1     s2      t2     s3    t3
    1      2      0      1     50      2      70     4     100
    2      1      0      2     15      3      100    0     0   

", header=TRUE)
Run Code Online (Sandbox Code Playgroud)

其中cohort是时间固定的协变量,s1- s3对应于时变协变量s = 1,2,3,4随时间变化的值(它们是个体随时间访问的不同状态).日历时间由定义t1- t3,和的范围是从0100用于每个单独的.

因此,例如,个体1保持在状态= 1直到日历时间= 50,然后他保持在状态= 2直到时间= 70,并且最后他保持在状态= 4直到时间100.

我想要获得的是"间隔"形式的数据集,即:

id   cohort  t.start    t.stop   start.s   end.s          
1      2        0         50        1        2
1      2       50         70 …
Run Code Online (Sandbox Code Playgroud)

r reshape

6
推荐指数
1
解决办法
243
查看次数

用于在没有Java虚拟机的情况下连接R和Excel的包

几个月前,我在互联网上找到了一个R套件的信息,用于连接R和Excel,反之亦然(基本上做什么xlsxXLConnect做什么).

但是,与上述两个解决方案的主要区别在于该软件包并未设计为使用JVM(这给我带来了一些麻烦).

我花了很多时间试图找到该包的参考,但没有成功.

你能帮助我吗?非常感谢.

excel r xlsx xlconnect

6
推荐指数
1
解决办法
7080
查看次数

使用NA填充数据框行内的特定重复值

对于我的数据帧的每一行,我目前正在尝试选择所有重复的值等于4,以便将它们设置为"等于"NA.

我的数据框是这样的:

dat <- read.table(text = "

   1  1  1  2  2  4  4  4  
   1  2  1  1  4  4  4  4", 

header=FALSE)
Run Code Online (Sandbox Code Playgroud)

我需要获得的是:

   1  1  1  2  2  4   NA  NA
   1  2  1  1  4  NA  NA  NA 
Run Code Online (Sandbox Code Playgroud)

我找到了有关如何消除重复行或列的信息,但我真的不知道如何继续这里..非常感谢任何帮助

r duplicates

4
推荐指数
1
解决办法
106
查看次数

检查数据帧行中的至少一个值是否大于给定的行特定阈值

这是我正在处理的数据集的一个可重复的小例子:

set.seed(123)
dat <- as.data.frame( cbind(a=1+round(runif(5), 2), b=round(rnorm(5), 2), high_cutoff=round(1+rnorm(5), 1)) )
Run Code Online (Sandbox Code Playgroud)

数据框是:

     a     b   high_cutoff
   1.29 -1.69         2.3
   1.79  1.24        -0.7
   1.41 -0.11         2.7
   1.88 -0.12         1.5
   1.94  0.18         3.5
Run Code Online (Sandbox Code Playgroud)

我试图通过行检查前两列中是否至少有一个值高于第三列中的correpondig阈值(假设我想存储1,如果这两个值中的任何一个更高那么截止).

在这个例子中,我期望找到的是:

   higher_than_cutoff         
0
1
0 
1
0
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用以下(错误)代码及其中的一些变体,但没有取得多大成功:

higher_than_cutoff <- apply( dat[, c("a", "b")], 1, function(x) any(x > dat[, "high_cutoff"]) )
Run Code Online (Sandbox Code Playgroud)

能否就如何进行提出一些建议?任何帮助都非常感谢

r apply

4
推荐指数
2
解决办法
1195
查看次数

在不等长度的许多行块内顺序编号

我的实际数据集由每个数据集的重复测量组成id,其中测量数量可能因人而异.一个简单的例子是:

dat <- data.frame(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L))
dat
##    id
## 1   1
## 2   1
## 3   1
## 4   1
## 5   1
## 6   1
## 7   2
## 8   2
## 9   3
## 10  3
## 11  3
Run Code Online (Sandbox Code Playgroud)

我试图按变量顺序编号datid.结果应该是:

dat
##    id s
## 1   1 1
## 2   1 2
## 3   1 3
## 4   1 4
## …
Run Code Online (Sandbox Code Playgroud)

r

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

删除数据帧中的所有左侧NA并左移移已清理的行

我有以下数据帧dat,它在一些行的开头呈现行特定数量的NA:

dat <- as.data.frame(rbind(c(NA,NA,1,3,5,NA,NA,NA), c(NA,1:3,6:8,NA), c(1:7,NA)))
dat

#  V1 V2 V3 V4 V5 V6 V7 V8
#  NA NA  1  3  5 NA NA NA
#  NA  1  2  3  6  7  8 NA
#   1 NA  2  3  4  5  6 NA
Run Code Online (Sandbox Code Playgroud)

我的目标是删除每行开头的所有NA,并左移行值(相应地在移位行的末尾添加NA,以保持其长度不变).

以下代码按预期工作:

for (i in 1:nrow(dat)) {

    if (is.na(dat[i,1])==TRUE) {
        dat1 <- dat[i, min(which(!is.na(dat[i,]))):length(dat[i,])]
        dat[i,]  <- data.frame( dat1, t(rep(NA, ncol(dat)-length(dat1))) )
    }

}

dat
Run Code Online (Sandbox Code Playgroud)

返回:

#  V1 V2 V3 V4 V5 V6 V7 V8
# …
Run Code Online (Sandbox Code Playgroud)

r tail na

3
推荐指数
2
解决办法
1023
查看次数

迭代地分配具有类似名称的对象作为函数参数,摆脱-eval(parse()) -

假设我有:

a_1 <- 2
a_2 <- 5
a_3 <- 7

my.foo <- function (input) {print(input^2)}
Run Code Online (Sandbox Code Playgroud)

我的目标是传递名称以a_as my.foo()参数开头的所有对象(因此在示例中a_1,a_2a_3).

以下代码按预期工作:

n <- length(ls(pattern = "a_")) 

for (i in 1:n) {  
    A <- paste("a_",i,sep="")
    my.foo(input=eval(parse(text=A)))
}
Run Code Online (Sandbox Code Playgroud)

我的感觉是,这并不是真正的"优雅"......就像"强迫"R用更简单的方式(通过宏变量)做我能用Stata做的事情.

我想知道是否有更直接的方法来解决这个问题.我试图把a_1,a_2a_3在列表中的对象,然后使用apply功能,但不是很成功.

谢谢,斯特凡诺

r function apply

2
推荐指数
1
解决办法
82
查看次数

找到第一个非零小数的位置

假设我有以下本地宏:

loc a = 12.000923
Run Code Online (Sandbox Code Playgroud)

我想获得第一个非零小数的小数位(4在本例中).

有很多方法可以实现这一目标.一种是a作为一个字符串处理并找到以下位置.:

loc a = 12.000923
loc b = strpos(string(`a'), ".")
di "`b'"
Run Code Online (Sandbox Code Playgroud)

从这里可以进一步循环小数并计数,因为我得到第一个非零元素.当然,这似乎不是一个非常优雅的方法.

你能建议一个更好的方法来解决这个问题吗?也许正则表达式?

regex string stata

2
推荐指数
1
解决办法
244
查看次数

在现有数据帧中存储有效的回归系数

我试图提高脚本的效率,基本上,我运行一些线性回归,并且对于每个拟合模型,我将估计的系数和标准误差结果存储在先前创建的数据帧中results.

因此,results在存储任何回归系数之前,数据框已经具有所需的尺寸.

此外,i我做的每一次回归:

mod.fit <- plm(y ~ x1 + x2, index="group", sample)
Run Code Online (Sandbox Code Playgroud)

然后我跑:

  results[i,1] <- summary(m.fit)$coefficients[1,1]
  results[i,2] <- summary(m.fit)$coefficients[2,1]
  results[i,3] <- summary(m.fit)$coefficients[1,2]
  results[i,4] <- summary(m.fit)$coefficients[2,2]
Run Code Online (Sandbox Code Playgroud)

有没有办法让上述存储步骤更快?

.

performance r apply

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

复杂的长到宽数据转换(具有时变变量)

我目前正在研究"长"形式的多态分析数据集(每个人观察一行;每个人最多重复测量5次).

这个想法是每个人都可以在时变状态变量 的水平上反复转换s = 1, 2, 3, 4.我所拥有的所有其他变量(此处cohort)都在任何给定的范围内固定id.

经过一些分析,我需要根据访问状态的具体顺序,以"宽"形式重塑数据集.以下是初始长数据的示例:

  dat <- read.table(text = "

        id    cohort    s    
        1       1       2
        1       1       2
        1       1       1
        1       1       4
        2       3       1
        2       3       1
        2       3       3
        3       2       1
        3       2       2
        3       2       3
        3       2       3
        3       2       4", 

    header=TRUE)     
Run Code Online (Sandbox Code Playgroud)

最后的"宽"的数据集应考虑到访问的状态,记录到新创建的变量的具体各个序列s1,s2,s3,s4,s5,其中s1在第一状态由个别走访等.

根据上面的示例,宽数据集看起来像:

    id    cohort    s1    s2    s3 …
Run Code Online (Sandbox Code Playgroud)

r reshape

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