问题:我需要估计一组多项逻辑多级模型,但找不到合适的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) 我装配在mutinomial模型中使用nnet
的multinom
使用功能(在此情况下对数据赋予男性和在不同湖泊鳄鱼的女性和不同尺寸类的饮食偏好):
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) 我的回答是一个分类变量(一些字母表),所以在制作模型时我使用了='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) 以下是代码和结果:
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 版本
我想运行中的R多项式Logit并使用了两个库,nnet
并且mlogit
,其产生不同的结果和报告不同类型的统计数据.我的问题是:
什么是系数和报告标准误差之间discrepency的来源nnet
和那些报道mlogit
?
我想用Latex
文件将结果报告给文件stargazer
.这样做时,存在一个有问题的权衡:
如果我使用mlogit
从那时开始的结果,我得到了我想要的统计数据,例如psuedo R平方,但输出是长格式的(见下面的例子).
如果我使用nnet
那时的结果,格式是预期的,但它报告我不感兴趣的统计数据,如AIC,但不包括,例如,psuedo R平方.
我想在我使用时mlogit
的格式化中报告统计数据.nnet
stargazer
这是一个可重复的示例,有三种选择:
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输出:
这是我想要的"宽"格式.注意不同的系数和标准误差.
我正考虑在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) 我正在像这样在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阶段创建的非负值。有什么解决办法吗?
我正在寻找类似于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中,是否还有其他方法可以从非均匀分布中进行采样?
谢谢.
我想获得具有标准误差的多项式 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) 长话短说:
我需要运行多项logit回归与R.我个人和时间固定效应想到可以用包mlogit
和survival
这一宗旨,但我不能找到一种方法,包括固定效应。
现在是长篇大论:
我在各种与堆栈相关的网站上发现了许多关于此主题的问题,但没有一个能够提供答案。此外,我注意到关于什么是具有固定效应的多项 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) multinomial ×10
r ×7
mlogit ×3
choice ×1
gbm ×1
lsmeans ×1
multi-level ×1
nnet ×1
numpy ×1
performance ×1
posthoc ×1
probability ×1
python ×1
random ×1
scikit-learn ×1
stargazer ×1
tensorflow ×1