Применение ускорения к MANCOVA в R (функции загрузки и MANCOVA) - PullRequest
0 голосов
/ 28 августа 2018

Я пытался внедрить MANCOVA в функции загрузки и продолжаю сталкиваться со следующей ошибкой. Любая помощь будет оценена!

library(boot)
library (jmv)
DATA <- read.csv("DATA.csv", header = T)
STAT <- function(DATA) {
    mancova(data = DATA,
        deps = cbind('FAC1', 'FAC2', 'FAC3', 'FAC4', 'FAC5'),
        factors = 'subtype',
        covs = 'age',
        multivar = 'pillai',
        boxM = FALSE,
        shapiro = FALSE,
        qqPlot = FALSE)
}
BS.OUT = boot(DATA, statistic = STAT, R = 1000, sim = 'parametric')

Ошибка в t.star [r,] <- res [[r]]: количество заменяемых элементов не кратно длине замены </p>

Не совсем уверен, что нужно сделать, чтобы это исправить. Любой совет будет высоко ценится!

Спасибо, A

1 Ответ

0 голосов
/ 28 августа 2018

Проблема, с которой вы сталкиваетесь, заключается в том, что вы получаете данные различной формы. Вы можете указать форму данных в вашей функции. Посмотрите, если эти ссылки помогают вообще.

Я привел несколько случайных данных в качестве примера.

Var1 = runif(10, 3, 30)
Var2 = runif(10, 2, 5)
Y <- cbind(Var1, Var2)
Age <- runif(10, 20, 30)
Sex <- gl(2, 5, labels = c("male", "female"))
df <- as.data.frame(cbind(Y, Age, Sex))
df$Sex <- as.factor(df$Sex)

stat_test_func <- function(x, indices) {
  x$Var1 <- x$Var1[indices]
  model <- glm(Var1 + Var2 ~ Sex*Age, data = x)
  return(coefs = coef(model))
}

bs.out <- boot(df, statistic = stat_test_func, R = 10, sim = "parametric")

> bs.out

PARAMETRIC BOOTSTRAP

Call:
boot(data = df, statistic = stat_test_func, R = 10, sim = "parametric")

Bootstrap Statistics :
       original  bias    std. error
t1*  131.650088       0           0
t2* -132.423883       0           0
t3*   -4.659926       0           0
t4*    5.804188       0           0

Редактировать

Прочитав еще ?boot, похоже, что для параметрической начальной загрузки вам необходимо предоставить функцию случайной генерации ran.gen. Но у меня возникли проблемы с той же ошибкой. Может случиться так, что каждый бутстрап неравен, т.е. факторы не равны, но я не уверен. Снятие возраста не изменило его.

stat_test_func <- function(x) {
  mancova(x, deps = c("Var1", "Var2"), factors = "Sex", multivar = "pillai")  
    }

stat_test_rg <- function(x, mle) {
  out <- x
  out$Var1 <- rexp(nrow(out), 1/mle)
  out$Var2 <- rexp(nrow(out), 1/mle)
  out
  print(out)
}

bs.out <- boot(df, statistic = stat_test_func, R = 10, sim = "parametric", ran.gen = stat_test_rg, mle = mean(df$Var1))

Error in t.star[r, ] <- res[[r]] : 
  number of items to replace is not a multiple of replacement length

Если вы рассматриваете возраст как фактор, я получаю другую ошибку . Так что этот ответ, возможно, уже не так полезен.

Var1 = runif(10, 3, 30)
Var2 = runif(10, 2, 5)
Age <- gl(2, 5, labels = c("young", "old"))
# Age <- runif(10, 20, 30)
Sex <- gl(2, 5, labels = c("male", "female"))
Y <- cbind(Var1, Var2)
df <- as.data.frame(cbind(Y, Age, Sex))
df$Sex <- as.factor(df$Sex)
df$Age <- as.factor(df$Age)

Error: Table$setRow(): value 'stat[pillai]' is not atomic 
...