我正在尝试使用(python)中的multinominal.pmf
函数scipy.stats
。
当我在输入中所有概率均大于零的情况下使用此函数时,它可以正常工作。问题是当我要使用其中一个概率为零的函数时。
以下示例说明了我的意思:
In [18]: multinomial.pmf([3, 3, 0], 6, [1/3.0, 1/3.0, 1/3.0])
Out[18]: 0.027434842249657095
In [19]: multinomial.pmf([3, 3, 0], 6, [2/3.0, 1/3.0, 0])
Out[19]: nan
Run Code Online (Sandbox Code Playgroud)
可以看出,在第一次所有概率均大于0的情况下,使用该函数没有问题。但是,当我将其中一个概率更改为零时,该函数返回nan
,即使通过该函数也应返回0.21948
。
当其中一个概率为零时,是否有一种方法(在python中)来计算pmf?可以通过其他方式处理该问题,或者解决该功能。
附加信息
我在示例中使用Matlab中的mnpdf函数计算了示例中的函数应返回的值。但是,由于我的其余代码在python中,所以我更喜欢找到一种在python中进行计算的方法。
我正在使用nnet包中的函数multinom来运行多项逻辑回归.
在多项逻辑回归中,据我所知,系数是响应概率与参考响应概率之比的对数变化(即ln(P(i)/ P(r))= B 1 + B 2*X ...其中i是一个响应类别,r是参考类别,X是一些预测器).
但是,拟合(multinom(...))会为每个类别生成估计值,甚至是参考类别r.
编辑示例:
set.seed(1)
library(nnet)
DF <- data.frame(X = as.numeric(rnorm(30)),
Y = factor(sample(letters[1:5],30, replace=TRUE)))
DF$Y<-relevel(DF$Y, ref="a") #ensure a is the reference category
model <- multinom(Y ~ X, data = DF)
coef(model)
# (Intercept) X
#b 0.1756835 0.55915795
#c -0.2513414 -0.31274745
#d 0.1389806 -0.12257963
#e -0.4034968 0.06814379
head(fitted(model))
# a b c d e
#1 0.2125982 0.2110692 0.18316042 0.2542913 0.1388810
#2 0.2101165 0.1041655 0.26694618 0.2926508 …
Run Code Online (Sandbox Code Playgroud) 我想从具有三个值(例如 )的多项分布生成大小为 20 的样本1,2 and 3
。例如,样本可以是这样的sam=(1,2,2,2,2,3,1,1,1,3,3,3,2,1,2,3,...1)
下面的代码可以工作,但没有得到预期的结果
> rmultinom(20,3,c(0.4,0.3,0.3))+1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
[1,] 1 1 3 2 2 1 1 2 3 2 3 2 1 2 2 3 1 2 2 2
[2,] 2 1 2 1 3 2 4 2 1 2 2 1 1 2 1 2 3 2 3 3
[3,] 3 4 1 3 1 …
Run Code Online (Sandbox Code Playgroud) 如何在 R 中拟合序数(3 个级别)逻辑混合效应模型?我想它就像一个 glmer,除了三个结果级别之外。
数据结构
patientid Viral_load Adherence audit_score visit
1520 0 optimal nonhazardous 1
1520 0 optimal nonhazardous 2
1520 0 optimal hazardous 3
1526 1 suboptimal hazardous 1
1526 0 optimal hazardous 2
1526 0 optimal hazardous 3
1568 2 suboptimal hazardous 1
1568 2 suboptimal nonhazardous 2
1568 2 suboptimal nonhazardous 3
Run Code Online (Sandbox Code Playgroud)
其中病毒载量(感兴趣的结果)由三个级别(0、1、2)组成,依从性 - 最佳/次优、审核评分无危险/危险以及 3 次就诊。
这是使用广义混合效果模型代码的模型外观的示例。
library (lme4)
test <- glmer(viral_load ~ audit_score + adherence + (1|patientid) + (1|visit), data = df,family = binomial) …
Run Code Online (Sandbox Code Playgroud) 我刚开始学习 Python。这是一个数据框:
a=pd.DataFrame({'A1':[0,1,2,3,2,1,6,0,1,1,7,10]})
Run Code Online (Sandbox Code Playgroud)
现在我认为这些数据遵循多项式分布。因此,12 个数字表示 12 个类别(类别 0、1、2...)的频率。例如,类别0的出现次数为0。因此,我希望在给定这些数据的情况下找到多项式的所有参数。最后,我们有多项式的最佳参数(或者我们可以说每个数字的最佳概率)。例如,
category: 0, 1, 2, 3, 4...
weights: 0.001, 0.1, 0.2, 0.12, 0.2...
Run Code Online (Sandbox Code Playgroud)
所以,我不需要测试数据来预测。这不是分类。作为一个新手,我什至不确定我是否应该使用 scipy.stats.multinomial 或 sklearn 模型,或者其他一些技术。那么,有人能给我一些帮助吗?
我有以下数据集如下所示.500和900之间的任何值被归类为A,而在900和~1500之间的值在A和B之间混合.我想找到在任何x值处得到A,B和C的概率,其中x是我的自变量和A,B,C是我的因变量.它似乎非常适合多项Logistic回归.我相信每个因变量的观测数量就足够了.如果多项式日志回归是合适的,我希望使用Python的scikit学习逻辑回归模块来获得任何x值的A,B和C的概率,但我不知道如何使用该模块来解决这个问题.
multinomial ×6
python ×3
r ×3
scipy ×2
matlab ×1
mixed-models ×1
numbers ×1
probability ×1
random ×1
scikit-learn ×1
statistics ×1