Как избежать ошибки «требуются числовые / сложные матричные / векторные аргументы»? - PullRequest
1 голос
/ 20 марта 2019

Я сначала загружаю таблицу. Таблица содержит 9 строк, 6 из которых являются факторами, а 3 слева - дискретные показатели скорости роста 152 особей (n01, n02, n03). Тогда я укажу факторы:

`r$feed <- factor (r$feed)`
`r$ph <- factor (r$ph)`
`r$aq <- factor (r$aq)`
`r$ind <- factor (r$ind)`
`r$wc <- factor (r$wc)`
`r$p0<- factor (r$p0)`

Затем, я выполняю, я объединяю фрейм данных в новую таблицу «r2» с интересующими меня факторами и удаляю значения NA с помощью функции na.omit.

`r2 <- data.table::melt(r,id.vars=c("feed","ph","aq","wc"),
                       measure=c("n01","n12","n23"),
                       variable.name="time",value.name="G")`

`r2<-na.omit(r2)`

r2 выглядит так:

data.frame(
           G = c(0.184, 0.087, 1.747, 0.11, 0.39, 0.062, 0.08, 0.189, 0.068,
                 0.262, 0.048, 0.029, 0, 0.229, 0.175),
        feed = as.factor(c("HF", "HF", "HF", "HF", "HF", "HF", "HF", "HF",
                           "HF", "HF", "HF", "HF", "HF", "HF", "HF")),
          ph = as.factor(c("8.1", "8.1", "8.1", "8.1", "8.1", "8.1", "8.1",
                           "8.1", "8.1", "8.1", "8.1", "8.1", "8.1", "8.1",
                           "8.1")),
          aq = as.factor(c("1", "1", "1", "1", "1", "1", "2", "2", "2", "2",
                           "2", "2", "2", "3", "3")),
          wc = as.factor(c("3", "3", "2", "3", "2", "4", "3", "4", "2", "2",
                           "3", "3", "1", "4", "3")),
        time = as.factor(c("n01", "n01", "n01", "n01", "n01", "n01", "n01",
                           "n01", "n01", "n01", "n01", "n01", "n01", "n01",
                           "n01"))
)

После этого я устанавливаю фиксированную дисперсию и применяю и выполняю модели 2 gls, например:

`vfix3 <- varIdent(form=~1|time*factor(aq))
    mix1 <- gls(G ~ ph+feed, weights=vfix3,data=r2)
    mix3 <- gls(G ~ ph+feed+wc+time, weights=vfix3,data=r2)`

Модели, кажется, работают нормально, так как я могу получить их резюме и анову. Затем я пытаюсь запустить пост парное сравнение с функцией lsmeans из пакета emmeans следующим образом:

    print(lsmeans(mix1, list(pairwise~ph|feed), adjust="tukey"))

lsmeans, кажется, прекрасно работает с двухфакторной моделью mix1. Однако при выполнении команды lsmeans на модели mix3 появляется эта ошибка:

Ошибка в crossprod (x, y): требуется числовая / сложная матрица / векторные аргументы

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


...