标签: multinomial

R中的多项Logistic多层模型

问题:我需要估计一组多项逻辑多级模型,但找不到合适的R包.评估此类模型的最佳R包是什么?STATA 13最近将这个功能添加到他们的多级混合效果模型中 - 所以估计这些模型的技术似乎是可用的.

细节:许多研究问题需要估计多项Logistic回归模型,其中结果变量是分类的.例如,生物学家可能有兴趣研究哪种树木(例如松树,枫树,橡树)受酸雨影响最大.市场研究人员可能会对客户的年龄与Target,Safeway或沃尔玛的购物频率之间是否存在关系感兴趣.这些情况的共同点是结果变量是分类的(无序的),而多项逻辑回归是优选的估计方法.就我而言,我正在调查人类迁移类型的差异,结果变量(mig)编码0 =未迁移,1 =内部迁移,2 =国际迁移.这是我的数据集的简化版本:

migDat=data.frame(hhID=1:21,mig=rep(0:2,times=7),age=ceiling(runif(21,15,90)),stateID=rep(letters[1:3],each=7),pollution=rep(c("high","low","moderate"),each=7),stringsAsFactors=F)

   hhID mig age stateID pollution
1     1   0  47       a      high
2     2   1  53       a      high
3     3   2  17       a      high
4     4   0  73       a      high
5     5   1  24       a      high
6     6   2  80       a      high
7     7   0  18       a      high
8     8   1  33       b       low
9     9   2  90       b       low
10   10   0  49       b       low
11   11   1  42 …
Run Code Online (Sandbox Code Playgroud)

r multi-level multinomial

25
推荐指数
3
解决办法
2万
查看次数

R:用于nnet multinom多项式的Tukey posthoc测试适用于测试多项分布的总体差异

我装配在mutinomial模型中使用nnetmultinom使用功能(在此情况下对数据赋予男性和在不同湖泊鳄鱼的女性和不同尺寸类的饮食偏好):

data=read.csv("https://www.dropbox.com/s/y9elunsbv74p2h6/alligator.csv?dl=1")
head(data)
  id size  sex    lake food
1  1 <2.3 male hancock fish
2  2 <2.3 male hancock fish
3  3 <2.3 male hancock fish
4  4 <2.3 male hancock fish
5  5 <2.3 male hancock fish
6  6 <2.3 male hancock fish

library(nnet)
fit=multinom(food~lake+sex+size, data = data, Hess = TRUE)
Run Code Online (Sandbox Code Playgroud)

我可以使用的因素的整体意义

library(car)
Anova(fit, type="III")  # type III tests
Analysis of Deviance Table (Type III tests)

Response: food
     LR Chisq Df Pr(>Chisq)    
lake   50.318 12 …
Run Code Online (Sandbox Code Playgroud)

r posthoc nnet multinomial lsmeans

16
推荐指数
1
解决办法
2109
查看次数

在gbm multiomial dist中,如何使用预测获得分类输出?

我的回答是一个分类变量(一些字母表),所以在制作模型时我使用了='multinomial',现在我想预测响应并根据这些字母而不是概率矩阵来获得输出.

然而,在predict(model, newdata, type='response')它中,它给出概率,与结果相同type='link'.

有没有办法获得分类输出?

BST = gbm(V1~.,data=training,distribution='multinomial',n.trees=2000,interaction.depth=4,cv.folds=5,shrinkage=0.005)

predBST = predict(BST,newdata=test,type='response')
Run Code Online (Sandbox Code Playgroud)

r machine-learning multinomial categorical-data gbm

11
推荐指数
1
解决办法
9825
查看次数

1.16.6 版本的 numpy.random.multinomial 比更高版本快 10 倍

以下是代码和结果:

python -c "import numpy as np; from timeit import timeit; print('numpy version {}: {:.1f} seconds'.format(np.__version__, timeit('np.random.multinomial(1, [0.1, 0.2, 0.3, 0.4])', number=1000000, globals=globals())))"
Run Code Online (Sandbox Code Playgroud)
numpy version 1.16.6:  1.5 seconds # 10x faster
numpy version 1.18.1: 15.5 seconds
numpy version 1.19.0: 17.4 seconds
numpy version 1.21.4: 15.1 seconds
Run Code Online (Sandbox Code Playgroud)

值得注意的是,使用固定随机种子,不同 numpy 版本的输出是相同的

python -c "import numpy as np; np.random.seed(0); print(np.__version__); print(np.random.multinomial(1, [0.1, 0.2, 0.3, 0.4], size=10000))" /tmp/tt
Run Code Online (Sandbox Code Playgroud)

关于为什么 1.16.6 之后的 numpy 版本慢 10 倍有什么建议吗?

我们已经将 pandas 升级到最新版本 1.3.4,需要 1.16.6 之后的 numpy 版本

performance numpy multinomial

11
推荐指数
1
解决办法
283
查看次数

R中的多项logit:mlogit与nnet

我想运行中的R多项式Logit并使用了两个库,nnet并且mlogit,其产生不同的结果和报告不同类型的统计数据.我的问题是:

  1. 什么是系数和报告标准误差之间discrepency的来源nnet和那些报道mlogit

  2. 我想用Latex文件将结果报告给文件stargazer.这样做时,存在一个有问题的权衡:

    • 如果我使用mlogit从那时开始的结果,我得到了我想要的统计数据,例如psuedo R平方,但输出是长格式的(见下面的例子).

    • 如果我使用nnet那时的结果,格式是预期的,但它报告我不感兴趣的统计数据,如AIC,但不包括,例如,psuedo R平方.

    我想在我使用时mlogit的格式化中报告统计数据.nnetstargazer

这是一个可重复的示例,有三种选择:

library(mlogit)

df = data.frame(c(0,1,1,2,0,1,0), c(1,6,7,4,2,2,1), c(683,276,756,487,776,100,982))
colnames(df) <- c('y', 'col1', 'col2')
mydata = df

mldata <- mlogit.data(mydata, choice="y", shape="wide")
mlogit.model1 <- mlogit(y ~ 1| col1+col2, data=mldata)
Run Code Online (Sandbox Code Playgroud)

编译时的tex输出是我所说的"长格式",我认为这是不希望的:

在此输入图像描述

现在,使用nnet:

library(nnet)
mlogit.model2 = multinom(y ~ 1 + col1+col2, data=mydata)
stargazer(mlogit.model2)
Run Code Online (Sandbox Code Playgroud)

给出tex输出:

在此输入图像描述

这是我想要的"宽"格式.注意不同的系数和标准误差.

r multinomial stargazer mlogit non-linear-regression

10
推荐指数
2
解决办法
4161
查看次数

R中使用多项式函数的多项式回归

我正考虑在Cross-Validated中发布我的问题,但决定来这里.我正在使用nnet软件包中的multinom()函数来估计因年龄和受教育程度而变得就业,失业或失业的可能性.我需要一些帮助解释.

我有一个依赖的分类变量就业状态(EmpSt)和两个独立的分类变量的以下数据集:年龄(年龄)和教育水平(教育).

>head(df)
               EmpSt   Age                         Education
1           Employed   61+   Less than a high school diploma
2           Employed 50-60 High school graduates, no college
3 Not in labor force 50-60   Less than a high school diploma
4           Employed 30-39       Bachelor's degree or higher
5           Employed 20-29  Some college or associate degree
6           Employed 20-29  Some college or associate degree
Run Code Online (Sandbox Code Playgroud)

以下是级别的摘要:

>summary(df)
                EmpSt          Age                                    Education    
 Not in universe   :    0   16-19: 6530   Less than a high school diploma  :14686  
 Employed          :61478   20-29:16031 …
Run Code Online (Sandbox Code Playgroud)

r probability multinomial logistic-regression

8
推荐指数
1
解决办法
1万
查看次数

在sklearn MultinomialNB中处理负值

我正在像这样在sklearn中运行MultinomialNB之前标准化我的文本输入:

vectorizer = TfidfVectorizer(max_df=0.5, stop_words='english', use_idf=True)
lsa = TruncatedSVD(n_components=100)
mnb = MultinomialNB(alpha=0.01)

train_text = vectorizer.fit_transform(raw_text_train)
train_text = lsa.fit_transform(train_text)
train_text = Normalizer(copy=False).fit_transform(train_text)

mnb.fit(train_text, train_labels)
Run Code Online (Sandbox Code Playgroud)

不幸的是,MultinomialNB不接受在LSA阶段创建的非负值。有什么解决办法吗?

python scikit-learn multinomial

8
推荐指数
1
解决办法
7946
查看次数

在TensorFlow中无需替换给定的非均匀分布即可进行抽样

我正在寻找类似于numpy.random.choice(range(3),replacement=False,size=2,p=[0.1,0.2,0.7])
TensorFlow的东西.

最接近Op它似乎是tf.multinomial(tf.log(p))将logits作为输入,但它不能在没有替换的情况下进行采样.在TensorFlow中,是否还有其他方法可以从非均匀分布中进行采样?

谢谢.

random choice multinomial tensorflow

8
推荐指数
1
解决办法
1193
查看次数

如何使用多项 logit 模型的标准误差获得平均边际效应 (AME)?

我想获得具有标准误差的多项式 logit 模型的平均边际效应 (AME)。为此,我尝试了不同的方法,但到目前为止还没有达到目标。

最好的尝试

我最好的尝试是使用mlogit我在下面显示的手动获取 AME 。

library(mlogit)
ml.d <- mlogit.data(df1, choice="Y", shape="wide")  # shape data for `mlogit()`
ml.fit <- mlogit(Y ~ 1 | D + x1 + x2, reflevel="1", data=ml.d)  # fit the model

# coefficient names
c.names <- names(ml.fit$model)[- c(1, 5:6)]

# get marginal effects
ME.mnl <- sapply(c.names, function(x) 
  stats::effects(ml.fit, covariate=x, data=ml.d), 
  simplify=FALSE) 

# get AMEs
(AME.mnl <- t(sapply(ME.mnl, colMeans)))
#              1            2            3           4          5
# D  -0.03027080 -0.008806072 0.0015410569 0.017186531 0.02034928
# x1 …
Run Code Online (Sandbox Code Playgroud)

r multinomial mlogit marginal-effects

8
推荐指数
1
解决办法
1658
查看次数

如何在 R 中运行具有个体和时间固定效应的多项 logit 回归

长话短说:

我需要运行多项logit回归与R.我个人和时间固定效应想到可以用包mlogitsurvival这一宗旨,但我不能找到一种方法,包括固定效应。

现在是长篇大论:

我在各种与堆栈相关的网站上发现了许多关于此主题的问题,但没有一个能够提供答案。此外,我注意到关于什么是具有固定效应的多项 logit 回归(人们使用不同的名称)以及实现此函数的 R 包存在很多混淆。所以我认为在进入正题之前提供一些背景是有益的。

考虑以下。在多项选择题中,每位受访者选择一项。受访者每年都会被问到同样的问题。t 时刻的选择受 t-1 时刻的选择影响的程度没有先验。现在想象有一个面板数据记录这些选择。数据看起来像这样:

set.seed(123)
# number of observations
n <- 100
# number of possible choice
possible_choice <- letters[1:4]
# number of years
years <- 3
# individual characteristics
x1 <- runif(n * 3, 5.0, 70.5)
x2 <- sample(1:n^2, n * 3, replace = F)
# actual choice at time 1
actual_choice_year_1 <- possible_choice[sample(1:4, n, replace = T, prob = rep(1/4, 4))]
actual_choice_year_2 <- possible_choice[sample(1:4, n, replace …
Run Code Online (Sandbox Code Playgroud)

r multinomial mlogit

8
推荐指数
0
解决办法
1349
查看次数