不同长度向量的向量化和

问题描述 投票:0回答:1

我正在尝试根据以下方程模拟 y 观测值:

对于 X 的所有可能值以及参数 Beta 和参数 Delta 的随机值。

使用 R 和 tidyverse 中的包,这就是我到目前为止所得到的:

library(tidyverse)
library(extraDistr)
n <- 100
x_max <- 4

data <- 
    tibble(
        id = 1:n,
        beta = rnorm(n, mean = 0, sd = 1/(x_max - 1)),
        delta = cbind(0, rdirichlet(n, rep(1, x_max - 1)))
    ) %>% 
    expand_grid(x = 1:x_max)

data

# A tibble: 400 × 4
      id  beta delta[,1]   [,2]  [,3]   [,4]     x
   <int> <dbl>     <dbl>  <dbl> <dbl>  <dbl> <int>
 1     1 0.139         0 0.738  0.206 0.0556     1
 2     1 0.139         0 0.738  0.206 0.0556     2
 3     1 0.139         0 0.738  0.206 0.0556     3
 4     1 0.139         0 0.738  0.206 0.0556     4
 5     2 0.174         0 0.0764 0.658 0.266      1
 6     2 0.174         0 0.0764 0.658 0.266      2
 7     2 0.174         0 0.0764 0.658 0.266      3
 8     2 0.174         0 0.0764 0.658 0.266      4
 9     3 0.305         0 0.346  0.254 0.399      1
10     3 0.305         0 0.346  0.254 0.399      2
# ℹ 390 more rows
# ℹ Use `print(n = ...)` to see more rows

我陷入了根据上面的公式计算 y 值的部分。挑战是在计算增量参数总和时使用 x 作为索引变量。我正在寻找的是这样的东西:

data %>% 
    rowwise() %>% 
    mutate(
        y = beta * sum(c_across(delta[,1]:delta[,x]))
    )

但是,此代码不起作用,我收到以下错误消息:

Error in `mutate()`:
ℹ In argument: `y = beta * sum(c_across(delta[, 1]:delta[, x]))`.
ℹ In row 1.
Caused by error in `c_across()`:
! Problem while evaluating `delta[, 1]`.
Caused by error:
! object 'delta' not found

我知道嵌套矩阵一定有问题

delta
。不过,我还是觉得
dplyr
应该能够支持向量化索引操作不是?

r indexing tidyverse vectorization
1个回答
0
投票

这接近您要找的东西吗?

library(tidyverse)
library(extraDistr)
#> 
#> Attaching package: 'extraDistr'
#> The following object is masked from 'package:purrr':
#> 
#>     rdunif

n <- 100
x_max <- 4

data <- 
  tibble(
    id = 1:n,
    beta = rnorm(n, mean = 0, sd = 1/(x_max - 1)),
    delta = cbind(0, rdirichlet(n, rep(1, x_max - 1)))
  ) %>% 
  expand_grid(x = 1:x_max)

data %>% 
  rowwise() %>% 
  mutate(
    y = beta * sum(delta[,1:x])
  )
#> # A tibble: 400 × 5
#> # Rowwise: 
#>       id    beta delta[,1]  [,2]   [,3]   [,4]     x       y
#>    <int>   <dbl>     <dbl> <dbl>  <dbl>  <dbl> <int>   <dbl>
#>  1     1  0.223          0 0.752 0.232  0.0163     1  0     
#>  2     1  0.223          0 0.752 0.232  0.0163     2  0.168 
#>  3     1  0.223          0 0.752 0.232  0.0163     3  0.219 
#>  4     1  0.223          0 0.752 0.232  0.0163     4  0.223 
#>  5     2  0.233          0 0.651 0.106  0.243      1  0     
#>  6     2  0.233          0 0.651 0.106  0.243      2  0.151 
#>  7     2  0.233          0 0.651 0.106  0.243      3  0.176 
#>  8     2  0.233          0 0.651 0.106  0.243      4  0.233 
#>  9     3 -0.0404         0 0.324 0.0280 0.648      1  0     
#> 10     3 -0.0404         0 0.324 0.0280 0.648      2 -0.0131
#> # ℹ 390 more rows
© www.soinside.com 2019 - 2024. All rights reserved.