1

かなり特定の正規表現の問題があり、悲しみを引き起こしています。lme混合モデル ( または のいずれか)から 1 つまたは複数の固定効果lme4を削除しました。対応するランダム勾配を削除したいと考えています。ただし、ランダム構造によっては、不要な+シンボルが残ったり、さらに悪いことに、|.

lmeからおよびlme4を使用lme.model$call$randomしてfindbars(formula(lme4.model))それぞれ得られた変量効果式のリストを取得します。

   random.structures = list(
  "~ b | random1",
  "(b | random1)",
  "~ b + x1 | random1",
  "(b + x1 | random1)",
  "~ x1 + b| random1",
  "(x1 + b| random1)",
  "~ b + x1 + c | random1",
  "(b+ x1 + c | random1)",
  "~b + x1 + x2 | random1",
  "(b + x1 + x2 | random1)",
  "~ x1 + x2 + b | random1",
  "(x1 + x2 + b | random1)"
)

変数を削除し、bc使用して固定効果式から削除しましたdropterms。それらは固定効果として存在しなくなったので、それらのランダムな勾配は変化することが許されるべきではありません。

b次の行をc使用して、上記のランダムな式から削除できます。

random.structures = lapply(random.structures, function(i) gsub("b|c", "", i))

+ここで、残りのシンボル、つまり変数をリンクしていないシンボルをすべて削除したいと思います。

~次に、または(との間に空白がある場合は、|を挿入したいと思い1ます。

望ましい出力は

random.structures2 = list(
  "~ 1 | random1",
  "(1 | random1)",
  "~ x1 | random1",
  "(x1 | random1)",
  "~ x1 | random1",
  "(x1 | random1)",
  "~ x1 | random1",
  "(x1 | random1)",
  "~ x1 + x2 | random1",
  "(x1 + x2 | random1)",
  "~ x1 + x2 | random1",
  "(x1 + x2 | random1)"
)

いじりましgsubたが、うまくいかないようです。たとえば、これは機能します:

gsub("(.*)\\+\\ |(.*)\\+(\\|)", "\\1", random.structures[[3]])
# Accounting for space or lack of space between + and |

しかし、これのためではありません:

gsub("(.*)\\+\\ |(.*)\\+(\\|)", "\\1", random.structures[[7]])

代わりに、ランダム構造のような既存の関数があればdropterms、私はオールインします!

同様に、またはの間1の空白スペースにa を確実に挿入することはできません。~ |( |

4

1 に答える 1

3

開始リストの項目の半分は適切な数式です (「~」が付いているもの)。括弧内の用語で何をしているのかわかりません。ただし、式については、Formula条件付け項を使用して項を削除するためのサポートを強化するためにパッケージを使用できます。

ここでは、適切な数式にサブセット化し、Formulaオブジェクトに変換します。

library(Formula)
rx <- lapply(random.structures[grep("~", random.structures)],
    function(x) Formula(as.formula(x)))

私たちはすぐに結果にピークを迎えることができます

sapply(rx, deparse)

# [1] "~b | random1"
# [2] "~b + x1 | random1"
# [3] "~x1 + b | random1"
# [4] "~b + x1 + c | random1"
# [5] "~b + x1 + x2 | random1"
# [6] "~x1 + x2 + b | random1"

これで、これらすべてからbandを削除できますc

nx <- lapply(x, function(x) update(x, ~.-b-c))

で結果を表示します

sapply(nx, deparse)

# [1] "~1 | random1" 
# [2] "~x1 | random1"
# [3] "~x1 | random1"
# [4] "~x1 | random1"
# [5] "~x1 + x2 | random1"
# [6] "~x1 + x2 | random1"

通常の数式を使用する場合は、これらを問題なく使用できます。

于 2015-05-07T20:23:41.243 に答える