Неверное количество измерений при использовании R.Update - PullRequest
0 голосов
/ 12 февраля 2020

Я очень новый пользователь R. Я учу себя использовать его, но я все еще совершаю много ошибок: (

Я пытаюсь запустить этот код, но у меня есть ошибка в функции Y_dina. Я надеюсь, что кто-то может объяснить, что это за ошибка и как чтобы исправить это.

Y_dina <- function(Alpha,q_m,s,g){
 for(i in 1:N)  
 {
    j_index = sample(50,1:J,replace=FALSE)
    for(j in 1:length(j_index))
    {
    s=runif(J,0.05, 0.25)
   g=runif(J,0.05, 0.25)
     u <- runif(1)
     
    eta = prod(Alpha[i,]^q_m[j_index[j,]])

 return(as.numeric((u>s[j])^eta*((u<g[j]))^(1-eta)))

       }
   }
   }

Я уже определяю альфа-матрицу и матрицу q_m, каждый раз, когда я запускаю код, у меня появляется одна и та же ошибка: Ошибка в альфе [i,]: неверное число измерений. Хотя альфа следующим образом:

K=4
N=10000
J=200
    Alpha = rep(0,K)
       for(j in 1:K){
           temp_m = combn(1:K,m=j)
           temp_mat = matrix(0,ncol(temp_m),K)
           for(j in 1:ncol(temp_m)) temp_mat[j,temp_m[,j]] = 1
           Alpha = rbind(Alpha,temp_mat)
       }
       Alpha = as.matrix(Alpha)

и

 q_m = matrix(rep(diag(K),2),K,K,byrow=TRUE)
       for(i in 2:K)
       {
           temp_m = combn(1:K,m=i)
           temp_mat = matrix(0,ncol(temp_m),K)
           for(j in 1:ncol(temp_m)) temp_mat[j,temp_m[,j]] = 1
           q_m = rbind(q_m,temp_mat)
       }

Я ценю любую помощь.

1 Ответ

0 голосов
/ 12 февраля 2020
    N= 10000
    J=200
    K=4
    Alpha = rep(0,K)
    for(j in 1:K){
      temp_m = combn(1:K,m=j)
      temp_mat = matrix(0,ncol(temp_m),K)
      for(j in 1:ncol(temp_m)) temp_mat[j,temp_m[,j]] = 1
      Alpha = rbind(Alpha,temp_mat)
    }
    Alpha = as.matrix(Alpha)

    Y_dina <- function(Alpha,q_m,s,g){
      for(i in 1:N)  
      {
        j_index = as.numeric(sample(50,1:J,replace=FALSE))#step1
        for(j in 1:length(j_index))
        {
          s=runif(J,0.05, 0.25)
          g=runif(J,0.05, 0.25)
          u <- runif(1)
          eta = prod(Alpha[i,]^q_m[j_index[j,]])#step2
          return(as.numeric((u>s[j])^eta*((u<g[j]))^(1-eta)))
        }
      }
    }

Из самого кода вы присваиваете Alpha матрицу. На шаге 1 j_index генерирует случайное значение, которое необходимо преобразовать в число c.

На шаге 2 вы назначаете значение продукта, которое является умножением матрицы на q_m и альфа. Следовательно, обе матрицы должны следовать умножению матриц. Пример, который вы приводите для обеих матриц - 1x4, следовательно, они не могут выполнять умножение матриц.

Размеры альфа [1: 16,1: 4] и Размеры q_m [1: 15,1: 4], когда я запускаю ваш код. Это может быть причиной того, что вы получаете неправильные размеры.

...