3

レベルに問題があります...以下を実行しています:

library(mlogit)

panel.datasm = data.frame(
    cbind( 
        round(runif(100, min=1, max=6)), 
        rep(1:20,each=5), runif(100, min=0, max=1), 
        runif(100, min=0, max=6), 
        runif(100, min=2, max=6) , 
        runif(100, min=0, max=1), 
        runif(100, min=0, max=6), 
        runif(100, min=2, max=6)  ))
names(panel.datasm) = c("choice", "id", "data_1991","data_1992",
  "data_1993", "data2_1991", "data2_1992","data2_1993") 


logit.data <- mlogit.data(panel.datasm, id = "id", choice = "choice", 
    varying= 3:5, shape = "wide", sep = "_")

エラーが発生し続けるError in Ops.factor(data[[choice]], alt) : level sets of factors are different

また、手動でレベルを割り当ててみました:

panel.datasm$id= factor(
    panel.datasm$id, 
    levels = sort(as.character(unique(panel.datasm$id)))  )

私は多くのことを試しましたが、何が間違っているのかわかりません。比較のために、以下をご覧ください。

data("Electricity", package = "mlogit")
head(Electricity)
Electr <- mlogit.data(Electricity, id = "id", choice = "choice", 
    varying = 3:26, shape = "wide", sep = "")

私が知る限り、これは私のデータ形式と同じです。何が起きてる?もう限界です。

4

3 に答える 3

2

私は問題を追跡したと信じています。あなたのchoice変数とあなたのalternative変数は同じでなければなりません。

最初の列を変更して、data.frameその間に値を持つ1991:1993ようにすると機能します。

panel.datasm = data.frame(
    cbind( 
        sample(1991:1993, 100, replace=TRUE), 
        rep(1:20,each=5), runif(100, min=0, max=1), 
        runif(100, min=0, max=6), 
        runif(100, min=2, max=6) , 
        runif(100, min=0, max=1), 
        runif(100, min=0, max=6), 
        runif(100, min=2, max=6)  ))
names(panel.datasm) = c("choice", "id", "data_1991","data_1992",
    "data_1993", "data2_1991", "data2_1992","data2_1993") 


logit.data <- mlogit.data(panel.datasm, id = "id", choice = "choice", 
    varying= 3:5, shape = "wide", sep = "_") 

結果:

head(logit.data)
       choice id  alt       data     data2 chid
1.1991  FALSE  1 1991 0.03540498 0.9726110    1
1.1992  FALSE  1 1992 5.85285278 2.7973798    1
1.1993   TRUE  1 1993 5.80795641 3.7360297    1
2.1991   TRUE  1 1991 0.59255235 0.2564928    2
2.1992  FALSE  1 1992 5.81443351 3.0820215    2
2.1993  FALSE  1 1993 2.11699854 5.4161634    2

と比べてみるとElectricityその違いは一目瞭然。1:4選択肢はであり、各選択肢の範囲は 1 ~ 4 であることに注意してください。

head(Electricity)
  choice id pf1 pf2 pf3 pf4 cl1 cl2 cl3 cl4 loc1 loc2 loc3 loc4 wk1 wk2 wk3 wk4
1      4  1   7   9   0   0   5   1   0   5    0    1    0    0   1   0   0   1
2      3  1   7   9   0   0   0   5   1   5    0    0    1    0   1   1   0   0
3      4  1   9   7   0   0   5   1   0   0    0    0    0    1   0   1   1   0
4      4  1   0   9   7   0   1   1   0   5    0    0    1    0   1   0   0   1
5      1  1   0   9   0   7   0   1   0   5    1    0    0    0   0   1   0   1
6      4  1   0   9   0   7   0   0   1   5    0    0    1    0   0   0   0   1
于 2011-11-10T21:31:44.343 に答える
0

問題は、row.namesによって作成されたreshapeものが一意ではなく、問題を引き起こしていることです。これが簡単な修正です。chid.var行ごとに一意のを追加する必要があります。私はそれを行うためにindex関数fromzooを使用しました。他の方法も使えると思います。

mlogit.data(panel.datasm, choice = 'choice', id = 'id', shape = 'wide', 
 varying = 3:8, sep = "_", chid.var = 1:NROW(index))

        choice id  alt     data      data2
1.1991  FALSE  1 1991 0.4769187 0.97381645
1.1992  FALSE  1 1992 3.2998748 0.70989021
1.1993  FALSE  1 1993 5.6199917 5.53069555
2.1991  FALSE  1 1991 0.3615670 0.02066214
2.1992  FALSE  1 1992 2.0461820 0.41804600
2.1993  FALSE  1 1993 2.2764992 3.93337758
于 2011-11-10T21:11:10.743 に答える
0

エラーは reshape パッケージから発生します。データの変換時に時間要素を判別できません。

mlogit ヘルプ ガイド ?mlogit.data は、オプション "alt.levels" の下でこれに対する解決策を提供します。次のように述べています 。変数(両方とも同じである必要があります)」。

代替の名前を指定していないため、 reshape は推測であり、それらを特定できません。その場合の修正は、それらの名前を手動で提供することです。質問で提供されたデータをそのままにして、次を使用します。

logit.data <- mlogit.data(panel.datasm, id = "id", choice = "choice", 
                      varying= 3:8, shape = "wide", sep = "_",
                      alt.levels = c("data_1991","data_1992","data_1993", "data2_1991", "data2_1992", "data2_1993"))

*注: @James が述べたように、3:5 ではなく 3:8 から変更する必要があります。

于 2018-01-22T16:20:51.943 に答える