如何获得在 R 中的 multinom() 中分析的准确观察结果,或者如何使 fitted() 对包括 NAs 在内的整个数据产生拟合
how to get the exact observations analyzed in multinom() in R, or how to make fitted() produce a fit on entire data including NAs
我的问题类似于另一个较旧的问题 "How to get the number of observations included in a model created using the function multinom in R?",但我想要寻找的是在模型中分析的确切观察结果,而不是观察结果的数量。最终,我希望将原始数据集与预测(拟合)概率的新列结合起来。但是让我用一个例子来说明我的问题:
如果我的样本是1000,有些变量有NA值,我在R中拟合了一个multinom(),并使用了fitted(),然后发现fitted()的长度只有870,也就是说有130个obs估计模型时排除。现在, fitted() 仅生成 870*1 (即一列)数字(概率),我无法知道每个概率数字对应于哪个观察值。我认为有两种方法可以解决这个问题:
- 在估计模型之前找出哪些观察被排除在原始数据中并删除它们。
- 尝试让 fitted() 产生一个 1000*1 的矩阵,其中 130 个元素为 NA。
我不知道任何一个的答案。任何意见,将不胜感激。最终目标是能够将拟合概率附加到原始数据集(作为新列),以便我可以得出推论。谢谢。
来自 ?multinom
in nnet:
model: logical. If true, the model frame is saved as component
'model' of the returned object.
所以调用multinom(..., model=TRUE)
,模型框架将在结果中。
编辑:
按照?multinom
中的例子:
options(contrasts = c("contr.treatment", "contr.poly"))
library(MASS)
example(birthwt)
bwt.mu <- multinom(low ~ ., bwt, model=TRUE)
查看对象内部模型框:
> str(bwt.mu$model)
'data.frame': 189 obs. of 9 variables:
$ low : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ age : int 19 33 20 21 18 21 22 17 29 26 ...
$ lwt : int 182 155 105 108 107 124 118 103 123 113 ...
$ race : Factor w/ 3 levels "white","black",..: 2 3 1 1 1 3 1 3 1 1 ...
$ smoke: logi FALSE FALSE TRUE TRUE TRUE FALSE ...
$ ptd : Factor w/ 2 levels "FALSE","TRUE": 1 1 1 1 1 1 1 1 1 1 ...
$ ht : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ ui : logi TRUE FALSE FALSE TRUE TRUE FALSE ...
$ ftv : Factor w/ 3 levels "0","1","2+": 1 3 2 3 1 1 2 2 2 1 ...
- attr(*, "terms")=Classes 'terms', 'formula' length 3 low ~ age + lwt + race + smoke + ptd + ht + ui + ftv
.. ..- attr(*, "variables")= language list(low, age, lwt, race, smoke, ptd, ht, ui, ftv)
.. ..- attr(*, "factors")= int [1:9, 1:8] 0 1 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:9] "low" "age" "lwt" "race" ...
.. .. .. ..$ : chr [1:8] "age" "lwt" "race" "smoke" ...
.. ..- attr(*, "term.labels")= chr [1:8] "age" "lwt" "race" "smoke" ...
.. ..- attr(*, "order")= int [1:8] 1 1 1 1 1 1 1 1
.. ..- attr(*, "intercept")= int 1
.. ..- attr(*, "response")= int 1
.. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. ..- attr(*, "predvars")= language list(low, age, lwt, race, smoke, ptd, ht, ui, ftv)
.. ..- attr(*, "dataClasses")= Named chr [1:9] "factor" "numeric" "numeric" "factor" ...
.. .. ..- attr(*, "names")= chr [1:9] "low" "age" "lwt" "race" ...
我的问题类似于另一个较旧的问题 "How to get the number of observations included in a model created using the function multinom in R?",但我想要寻找的是在模型中分析的确切观察结果,而不是观察结果的数量。最终,我希望将原始数据集与预测(拟合)概率的新列结合起来。但是让我用一个例子来说明我的问题:
如果我的样本是1000,有些变量有NA值,我在R中拟合了一个multinom(),并使用了fitted(),然后发现fitted()的长度只有870,也就是说有130个obs估计模型时排除。现在, fitted() 仅生成 870*1 (即一列)数字(概率),我无法知道每个概率数字对应于哪个观察值。我认为有两种方法可以解决这个问题:
- 在估计模型之前找出哪些观察被排除在原始数据中并删除它们。
- 尝试让 fitted() 产生一个 1000*1 的矩阵,其中 130 个元素为 NA。
我不知道任何一个的答案。任何意见,将不胜感激。最终目标是能够将拟合概率附加到原始数据集(作为新列),以便我可以得出推论。谢谢。
来自 ?multinom
in nnet:
model: logical. If true, the model frame is saved as component
'model' of the returned object.
所以调用multinom(..., model=TRUE)
,模型框架将在结果中。
编辑:
按照?multinom
中的例子:
options(contrasts = c("contr.treatment", "contr.poly"))
library(MASS)
example(birthwt)
bwt.mu <- multinom(low ~ ., bwt, model=TRUE)
查看对象内部模型框:
> str(bwt.mu$model)
'data.frame': 189 obs. of 9 variables:
$ low : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ age : int 19 33 20 21 18 21 22 17 29 26 ...
$ lwt : int 182 155 105 108 107 124 118 103 123 113 ...
$ race : Factor w/ 3 levels "white","black",..: 2 3 1 1 1 3 1 3 1 1 ...
$ smoke: logi FALSE FALSE TRUE TRUE TRUE FALSE ...
$ ptd : Factor w/ 2 levels "FALSE","TRUE": 1 1 1 1 1 1 1 1 1 1 ...
$ ht : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ ui : logi TRUE FALSE FALSE TRUE TRUE FALSE ...
$ ftv : Factor w/ 3 levels "0","1","2+": 1 3 2 3 1 1 2 2 2 1 ...
- attr(*, "terms")=Classes 'terms', 'formula' length 3 low ~ age + lwt + race + smoke + ptd + ht + ui + ftv
.. ..- attr(*, "variables")= language list(low, age, lwt, race, smoke, ptd, ht, ui, ftv)
.. ..- attr(*, "factors")= int [1:9, 1:8] 0 1 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:9] "low" "age" "lwt" "race" ...
.. .. .. ..$ : chr [1:8] "age" "lwt" "race" "smoke" ...
.. ..- attr(*, "term.labels")= chr [1:8] "age" "lwt" "race" "smoke" ...
.. ..- attr(*, "order")= int [1:8] 1 1 1 1 1 1 1 1
.. ..- attr(*, "intercept")= int 1
.. ..- attr(*, "response")= int 1
.. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. ..- attr(*, "predvars")= language list(low, age, lwt, race, smoke, ptd, ht, ui, ftv)
.. ..- attr(*, "dataClasses")= Named chr [1:9] "factor" "numeric" "numeric" "factor" ...
.. .. ..- attr(*, "names")= chr [1:9] "low" "age" "lwt" "race" ...