1. ホーム
  2. r

[解決済み] na.fail.defaultのエラー:オブジェクトの値が見つからない - しかし、値が見つからないことはありません。

2022-02-17 20:47:22

質問

これらのデータでlmeモデルを実行しようとしています。

tot_nochc=runif(10,1,15)
cor_partner=factor(c(1,1,0,1,0,0,0,0,1,0))
age=runif(10,18,75)
agecu=age^3
day=factor(c(1,2,2,3,3,NA,NA,4,4,4))
dt=as.data.frame(cbind(tot_nochc,cor_partner,agecu,day))
attach(dt)

corpart.lme.1=lme(tot_nochc~cor_partner+agecu+cor_partner *agecu, 
                  random = ~cor_partner+agecu+cor_partner *agecu |day, 
                  na.exclude(day))

このエラーコードが表示されるのですが。

na.fail.default(list(cor_partner = c(1L, 1L, 2L, 1L, 1L, ...)) でエラー。 オブジェクトに値がない

フォーラムで似たような質問があることは承知しています。しかし、私の場合は

  • cor_partnerに欠損値がない。
  • オブジェクト全体が要因としてコード化されている(少なくとも地球環境から見て)。

NA値をna.actionで除外することもできますが、それよりも、なぜこの関数が欠損値を読み取るのか、私のデータに何が起きているのかを正確に理解したいのです。

どのように解決するのですか?

tl;dr を使用する必要があります。 na.exclude()

set.seed(101)
tot_nochc=runif(10,1,15)
cor_partner=factor(c(1,1,0,1,0,0,0,0,1,0))
age=runif(10,18,75)
agecu=age^3
day=factor(c(1,2,2,3,3,NA,NA,4,4,4))
## use data.frame() -- *DON'T* cbind() first
dt=data.frame(tot_nochc,cor_partner,agecu,day)
## DON'T attach(dt) ...

library(nlme) corpart.lme.1=lme(tot_nochc~cor_partner+agecu+cor_partner *agecu, random = ~cor_partner+agecu+cor_partner *agecu |day, data=dt, na.action=na.exclude)

収束エラーや警告が出ますが、これは十分な情報が入っていない小さな作り物のデータセットを使っているためで、コードに固有の問題があるわけではないと思います。