使用非 'choice'(土地覆盖)数据实施 mlogit

Implementing mlogit with non 'choice' (land cover) data

我正在尝试使用 mlogit 和土地覆盖变化数据来实施多项式逻辑回归。然而,因为 mlogit 似乎是围绕“选择”数据构建的,并且示例仅限于此类数据,所以我很难确定使用这个 R 包进行分析的可行性。我相信多项逻辑回归是适合我要解决的数据集和问题的统计方法,只是不确定 mlogit 是否有能力处理数据。

让我们以这个土地覆盖变化数据集为例,其结构与我自己的类似:

dat.url<-'http://www.css.cornell.edu/faculty/dgr2/_static/files/R_ds/lcc.csv'
data<-read.csv(dat.url)
head(data)
  cov     dr   ds  t lspos text
1  CC 2924.3 4853 Nt     A   LC
2  CC 2535.2 5242 Nt     A   LC
3  CO 2146.1 4957 Ci     A   LC
4  NO 2442.3 4690 Ci     A   LC
5  NC 2831.4 5079 Ci     A   LC
6  OO 1576.9 4283 Nt     A   LC

cov变量是一个复合代码,表示土地覆盖在两个时间段之间如何变化:第一个字符是初始测量时的土地覆盖class,第二个字符是结束时间的土地覆盖 class。例如,CC 表示土地覆盖没有变化的样本点——在两个时间段都是封闭的冠层森林。或者,CO 表示土地覆盖从初始时间段的封闭冠层转变为结束时间的开放冠层的点。其余变量是土地覆盖变化的预测因子:dr – 到道路的距离,ds – 到定居点的距离,t – 土地使用权 class,lspos – 景观位置 class, text – 土壤质地 class.

我对 mlogit 的担忧是,这不是大多数示例中的“选择”数据。因此,如果我尝试遵循 this exercise published by Train & Croissant,将数据转换为 mlogit 的长格式,结果如下:

dat.mlog<-dfidx(data, varying=NULL, shape="wide", choice="cov")
head(dat.mlog)
~~~~~~~
 first 10 observations out of 9576 
~~~~~~~
     cov     dr   ds  t lspos text  idx
1   TRUE 2924.3 4853 Nt     A   LC 1:CC
2  FALSE 2924.3 4853 Nt     A   LC 1:CN
3  FALSE 2924.3 4853 Nt     A   LC 1:CO
4  FALSE 2924.3 4853 Nt     A   LC 1:NC
5  FALSE 2924.3 4853 Nt     A   LC 1:NN
6  FALSE 2924.3 4853 Nt     A   LC 1:NO
7  FALSE 2924.3 4853 Nt     A   LC 1:OC
8  FALSE 2924.3 4853 Nt     A   LC 1:ON
9  FALSE 2924.3 4853 Nt     A   LC 1:OO
10  TRUE 2535.2 5242 Nt     A   LC 2:CC

~~~ indexes ~~~~
   id1 id2
1    1  CC
2    1  CN
3    1  CO
4    1  NC
5    1  NN
6    1  NO
7    1  OC
8    1  ON
9    1  OO
10   2  CC
indexes:  1, 2 

因此,对于每个样本点,它会在所有 idx 类别中产生相同的预测变量值——按照 dfidx() 格式化的方式,我的解释是对于每个人指出我的预测结果对于每个土地覆盖转变都是相同的。这似乎可能会在分析这些数据时引入问题。虽然我无法在这个示例数据集上 运行 mlogit() 模型本身(另一个单独的问题),但当我 运行 它在我自己的数据上时,结果是 p-values =每个预测变量 1——似乎有点可疑。有谁知道这是否确实是对此类土地覆盖数据的 mlogitdfidx() 的正确实施?

请注意,有一些已发表的论文使用 mlogit 土地覆盖数据(尽管我还没有找到任何支持代码来查看它是如何实现的),尽管我可以 运行 这些模型使用 nnet/multinom,我希望能够使用 mlogit,这样我就可以将随机效应项合并到我的模型中。任何帮助将不胜感激!

mlogit可以处理这类数据。我想这应该是mlogit的公式怎么写的问题。

公式写成outcome ~ choice specific vars | chooser specific vars 您想要文档中所谓的纯“多项式模型”,它是通过以下调用实现的:summary(mlogit(mode ~ 0 | income, data = Fish))(在 ?mlogit 中)。

> summary(mlogit(cov ~ 0| dr + ds, dat.mlog))

Call:
mlogit(formula = cov ~ 0 | dr + ds, data = dat.mlog, method = "nr")

Frequencies of alternatives:choice
      CC       CN       CO       NC       NN       NO       OC       ON       OO 
0.334586 0.262218 0.206767 0.015977 0.080827 0.042293 0.012218 0.014098 0.031015 

nr method
6 iterations, 0h:0m:1s 
g'(-H)^-1g = 0.000677 
successive function values within tolerance limits 

Coefficients :
                  Estimate  Std. Error z-value  Pr(>|z|)    
(Intercept):CN  6.0043e-01  1.5913e-01  3.7731 0.0001612 ***
(Intercept):CO -4.0284e-02  1.6288e-01 -0.2473 0.8046562    
(Intercept):NC -3.4319e+00  4.7527e-01 -7.2210 5.163e-13 ***
(Intercept):NN -1.1944e+00  2.2550e-01 -5.2969 1.178e-07 ***
(Intercept):NO -2.4593e+00  3.0252e-01 -8.1293 4.441e-16 ***
(Intercept):OC -4.5496e+00  5.9764e-01 -7.6127 2.687e-14 ***
(Intercept):ON -2.5914e+00  4.9472e-01 -5.2381 1.622e-07 ***
(Intercept):OO -2.4502e+00  3.4192e-01 -7.1660 7.723e-13 ***
dr:CN          -4.2871e-04  1.0852e-04 -3.9504 7.802e-05 ***
dr:CO          -7.1969e-05  6.4000e-05 -1.1245 0.2607944    
dr:NC          -9.9542e-07  1.4613e-04 -0.0068 0.9945650    
dr:NN           8.1395e-06  7.5500e-05  0.1078 0.9141481    
dr:NO           4.8619e-05  8.3781e-05  0.5803 0.5617037    
dr:OC           1.4399e-04  1.0952e-04  1.3147 0.1886161    
dr:ON           1.5983e-04  1.1730e-04  1.3626 0.1730170    
dr:OO           7.3787e-05  9.3620e-05  0.7882 0.4306060    
ds:CN          -3.0704e-04  1.1484e-04 -2.6735 0.0075059 ** 
ds:CO          -2.3050e-04  1.0504e-04 -2.1944 0.0282063 *  
ds:NC           2.1811e-04  2.4650e-04  0.8848 0.3762581    
ds:NN          -1.4912e-04  1.3878e-04 -1.0745 0.2825894    
ds:NO           1.7379e-04  1.5609e-04  1.1134 0.2655345    
ds:OC           4.5264e-04  2.3766e-04  1.9046 0.0568347 .  
ds:ON          -5.5640e-04  3.4013e-04 -1.6358 0.1018749    
ds:OO          -2.6007e-05  1.9131e-04 -0.1359 0.8918706    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log-Likelihood: -1726.7
McFadden R^2:  0.027107 
Likelihood ratio test : chisq = 96.218 (p.value = 1.7634e-13)

否则,您将获得 p 值 1 和系数 0。

summary(mlogit(cov ~ dr + ds| 0, dat.mlog))

Call:
mlogit(formula = cov ~ dr + ds | 0, data = dat.mlog, method = "nr")

Frequencies of alternatives:choice
      CC       CN       CO       NC       NN       NO       OC       ON       OO 
0.334586 0.262218 0.206767 0.015977 0.080827 0.042293 0.012218 0.014098 0.031015 

nr method
1 iterations, 0h:0m:0s 
g'(-H)^-1g = 1E+10 
last step couldn't find higher value 

Coefficients :
     Estimate Std. Error z-value Pr(>|z|)
dr 0.0000e+00 9.9283e+10       0        1
ds 0.0000e+00 1.1212e+11       0        1

Log-Likelihood: -2337.8