使用非 '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——似乎有点可疑。有谁知道这是否确实是对此类土地覆盖数据的 mlogit
和 dfidx()
的正确实施?
请注意,有一些已发表的论文使用 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
我正在尝试使用 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——似乎有点可疑。有谁知道这是否确实是对此类土地覆盖数据的 mlogit
和 dfidx()
的正确实施?
请注意,有一些已发表的论文使用 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