标签: gamma-distribution

使用(python)Scipy拟合伽玛分布

任何人都可以帮助我在python中安装gamma分布吗?好吧,我有一些数据:X和Y坐标,我想找到适合这种分布的伽玛参数...在Scipy doc中,事实证明,拟合方法实际存在,但我不知道如何使用它:s ..首先,参数"data"必须采用哪种格式,如何提供第二个参数(参数),因为那是我正在寻找的?

python distribution gamma-distribution scipy

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

色彩空间,伽马和图像增强

色彩空间.好吧,每个人都知道RGB:在[0.0,1.0]范围内归一化的三个值,它们具有红绿蓝色的强度的含义; 这个强度是线性的,不是吗?

伽玛.据我所知,gamma是一种将RGB颜色分量映射到另一个值的函数.谷歌搜索,我已经看到线性函数和非线性函数...线性函数似乎缩放RGB分量,所以它似乎调整图像亮度; 非线性函数似乎"解压缩"更暗/更亮的组件.

现在,我开始实现一个图像查看器,它将显示不同的图像格式作为纹理.我想修改这些图像的伽玛,所以我应该建立一个片段着色器并在纹理四边形上运行.很好,但我如何确定正确的伽马校正?

OpenGL使用线性RGB颜色空间,使用浮点组件.实际上,我可以从这些值(具有特殊浮点精度)开始计算伽马校正值,因此在钳制伽马校正值后显示它们.

首先,我将确定伽玛斜坡.我怎么能确定它?(分析或使用查找表)

然后,我开始调查OpenGL扩展EXT_framebuffer_sRGB,这似乎与扩展EXT_texture_sRGB非常相关.

EXT_texture_sRGB引入了一种新的纹理格式,用于将textel值线性化为RGB线性空间.(脚注1)通过这种方式,我知道sRGB色彩空间并将其用作线性RGB色彩空间.

相反,EXT_framebuffer_sRGB扩展允许我将线性RGB值编码到sRGB帧缓冲区,而不用担心它.

...

等等,所有这些信息是为了什么?如果我可以使用sRGB framebuffer并加载sRGB纹理,处理纹理而不进行sRGB转换...为什么我应该更正伽玛?

即使在sRGB缓冲区上,也许我可以校正所有相同的伽玛?或者我最好不要?亮度和对比度:它们应在伽玛校正之前还是之后应用?

这是很多信息,我现在感到困惑.希望你们中的某个人能够向我解释所有这些概念!谢谢.

...

还有一个问题.在设备伽玛与"标准"2.2不同的情况下,如何"累积"不同的伽马校正?我不知道是否清楚:如果图像的RGB值已经针对伽马值为2.2的显示器进行了校正,但显示器的伽马值为2.8,如何校正伽马?


(1)这里有一些摘要突出我的意思:

sRGB色彩空间基于光线昏暗的办公室中预期的典型(非线性)监视器特性.它已由国际电工委员会(IEC)标准化为IEC 61966-2-1.sRGB色彩空间大致对应于2.2伽马校正.


此扩展是否提供任何类型的sRGB帧缓冲格式或保证使用sRGB纹理渲染的图像在输出到支持sRGB色彩空间的设备时"看起来不错"?

   RESOLVED:  No.

  Whether the displayed framebuffer is displayed to a monitor that
    faithfully reproduces the sRGB color space is beyond the scope
    of this extension.  This involves the gamma correction and color
    calibration of the physical display device.

    With this extension, artists can author content in an sRGB color
    space and provide that sRGB content …
Run Code Online (Sandbox Code Playgroud)

opengl rgb gamma gamma-distribution srgb

13
推荐指数
2
解决办法
9599
查看次数

从R中的反伽马分布中采样

为了从R中的反伽马分布进行采样,以下是正确的方法:

#I want to sample an inverse-gamma(a,b)

a = 4
b = 9

x = 1/rgamma(1,a,b)
Run Code Online (Sandbox Code Playgroud)

random r gamma-distribution

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

尝试使用R fitdistr {MASS}进行伽玛分布时的错误

我在R.中有fitdistr {MASS}函数有问题.我有这个向量:

a <- c(26,73,84,115,123,132,159,207,240,241,254,268,272,282,300,302,329,346,359,367,375,378, 384,452,475,495,503,531,543,563,594,609,671,687,691,716,757,821,829,885,893,968,1053,1081,1083,1150,1205,1262,1270,1351,1385,1498,1546,1565,1635,1671,1706,1820,1829,1855,1873,1914,2030,2066,2240,2413,2421,2521,2586,2727,2797,2850,2989,3110,3166,3383,3443,3512,3515,3531,4068,4527,5006,5065,5481,6046,7003,7245,7477,8738,9197,16370,17605,25318,58524)
Run Code Online (Sandbox Code Playgroud)

我想用命令将伽马分布拟合到数据:

fitted.gamma <- fitdistr(a, "gamma")
Run Code Online (Sandbox Code Playgroud)

但我有这样的错误:

Error in optim(x = c(26, 73, 84, 115, 123, 132, 159, 207, 240, 241, 254,  : 
non-finite finite-difference value [1]
In addition: Warning messages:
1: In densfun(x, parm[1], parm[2], ...) : NaNs produced
2: In densfun(x, parm[1], parm[2], ...) : NaNs produced
3: In densfun(x, parm[1], parm[2], ...) : NaNs produced
4: In densfun(x, parm[1], parm[2], ...) : NaNs produced
Run Code Online (Sandbox Code Playgroud)

所以我尝试初始化参数:

(fitted.gamma <- fitdistr(a, "gamma", start=list(1,1)))
Run Code Online (Sandbox Code Playgroud)

fit.gamma对象已创建,但在打印时会产生错误:

Error …
Run Code Online (Sandbox Code Playgroud)

r gamma-distribution

10
推荐指数
1
解决办法
9086
查看次数

如何在python中使用alpha和beta参数绘制gamma分布

我想绘制一个alpha = 29(比例)和beta = 3(大小)的伽玛分布.换句话说,我想为Gamma绘制pdf(29,3).如果根据文档,python gamma函数只有参数a和x且size参数不存在,我该怎么做呢?

我认为loc是测试版,但我认为它实际上是偏移的,所以下面的代码是错误的...

import numpy as np
import scipy.stats as stats 
from matplotlib import pyplot as plt

x = np.linspace (0, 100, 200) 
y1 = stats.gamma.pdf(x, a=29, loc=3) #a is alpha, loc is beta???
plt.plot(x, y1, "y-", label=(r'$\alpha=29, \beta=3$')) 


plt.ylim([0,0.08])
plt.xlim([0,150])
plt.show()
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib gamma-distribution scipy

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

用于GLM伽玛分布的SAS和R之间的标准误差

我将模型的R和SAS的GLM输出与Gamma分布进行比较.点估计是相同的,但它们具有不同的标准误差估计,因此具有不同的p值.

有谁知道为什么?我想知道R和SAS是否使用不同的方法来估计标准误差?也许MLE与时刻的方法?

R示例代码

set.seed(2)
test = data.table(y = rnorm(100, 1000, 100), x1 = rnorm(100, 50, 20), x2 = rgamma(100, 0.01))
model = summary(glm(formula = y ~ x1+x2 , family = Gamma(link = "log"), data = test))
Run Code Online (Sandbox Code Playgroud)

使用此处生成的相同数据,我使用以下代码在SAS中运行模型:

proc genmod data= test_data;
                model y =  x1 x2 /link= log dist= gamma;
    run;
Run Code Online (Sandbox Code Playgroud)

R的输出如下:

Call:
glm(formula = y ~ x1 + x2, family = Gamma(link = "log"), data = test)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-0.26213  -0.08456  -0.01033   0.08364   0.20878 …
Run Code Online (Sandbox Code Playgroud)

statistics r sas gamma-distribution glm

6
推荐指数
1
解决办法
586
查看次数

Gamma GLM:NaN 产生和发散错误

介绍

我正在尝试构建一个 GLM,该模型根据鱼群的大小和年龄来模拟鱼群标本产卵的数量(质量)。

因此,变量是:

  • eggW:产卵的总质量,一个连续的正变量,范围在 300 到 30000 之间。

  • fishW:鱼的质量,连续且正数,范围在 3 到 55 之间。

  • age: 1 年或 2 年。

没有0,没有NA。

在检查并意识到假设正态分布可能不合适之后,我决定使用 Gamma 分布。我选择 Gamma 主要是因为该变量是正的且连续的,随着值的增加方差增加并且看起来偏斜,如下图所示。

eggW 值的频率分布:在此处输入图片说明

鱼W vs 蛋W:在此处输入图片说明

编码

myglm <- glm(eggW ~ fishW * age, family=Gamma(link=identity), 
start=c(mean(data$eggW),1,1,1),
maxit=100)
Run Code Online (Sandbox Code Playgroud)

maxit在本页面的帖子中看到它建议作为glm.fit: algorithm did not converge错误的解决方案后添加了该因素,并且它起作用了。

我之所以选择使用,link=identity是因为用生物学术语而不是使用inverselog链接对结果进行了更明显和直接的解释。

因此,上面的代码会产生下一条消息:

警告消息:
1:在日志中(ifelse(y == 0, 1,y/mu)):产生的 NaN
2:由于分歧而截断步长

重要的是,如果删除变量并且只保留年龄,则 不会显示错误警告fishW。如果使用链接,则不会报告任何错误log

问题

如果我的模型设计背后的基本原理是可以接受的,我想了解为什么会报告这些错误以及如何解决或避免它们。无论如何,我将不胜感激任何批评或建议。

r gamma-distribution glm

6
推荐指数
1
解决办法
1517
查看次数

伽玛障碍(两部分)模型和零膨胀伽玛模型之间有区别吗?

我有半连续数据(许多精确的零和连续的正结果),我正在尝试建模。我从 Zuur 和 Ieno 的《R 中零膨胀模型初学者指南》中学到了关于大量零质量的建模数据的知识,该指南区分了零膨胀伽玛模型和他们所描述的“零改变”伽玛模型作为障碍模型,结合了零点的二项式分量和正连续结果的伽玛分量。我一直在探索包ziGamma中选项的使用glmmTMB,并将所得系数与我按照 Zuur 书中的说明(第 128-129 页)构建的障碍模型进行比较,但它们并不相符。我无法理解为什么不这样做,因为我知道伽玛分布不能呈现零值,所以我认为每个零膨胀伽玛模型在技术上都是一个障碍模型。谁能为我阐明这一点?请参阅代码下方有关模型的更多注释。

library(tidyverse)
library(boot)
library(glmmTMB)
library(parameters)

### DATA

id <- rep(1:75000)
age <- sample(18:88, 75000, replace = TRUE)
gender <- sample(0:1, 75000, replace = TRUE)
cost <- c(rep(0, 30000), rgamma(n = 37500, shape = 5000, rate = 1), 
          sample(1:1000000, 7500, replace = TRUE))
disease <- sample(0:1, 75000, replace = TRUE)
time <- sample(30:3287, 75000, replace = TRUE)

df <- data.frame(cbind(id, disease, age, gender, cost, time))

# …
Run Code Online (Sandbox Code Playgroud)

r gamma-distribution glm glmmtmb

6
推荐指数
1
解决办法
5839
查看次数

使用python scipy将伽马分布拟合到数据中

我想在我的数据中使用伽玛分布,我使用它

import scipy.stats as ss
import scipy as sp
import numpy as np
import os
import matplotlib.pyplot as plt

alpha = []
beta = []
loc = []

data = np.loadtxt(data)
fit_alpha, fit_loc, fit_beta = ss.gamma.fit(data, floc=0, fscale=1)
Run Code Online (Sandbox Code Playgroud)

我希望将伽玛分布中的一个参数保留为变量(比如形状),并修复其中一个参数(比方说scale=1).但是,如果我将loc变量保持为零,我无法将比例固定为一.这有什么解决方法吗?我是否可以仅使用形状和比例来参数化伽玛分布?

python statistics gamma-distribution scipy

5
推荐指数
1
解决办法
5350
查看次数

R中的经验贝叶斯

David Robinson给出了贝叶斯经验值随beta分布更新的一个很好的例子。他

  1. 从分布中找到先验
  2. 在更新每个击球手的估计值之前使用它。

这具有显着效果,即根据现有数据量加权平均值,并将低数据观测值缩小至更接近平均值。

我们如何更新计数正常情况的估计值。我假设伽马用于计数,高斯用于普通,但是如果有人有的话,我很乐意在R中看到这样的示例。

r normal-distribution gamma-distribution tidyverse

5
推荐指数
1
解决办法
689
查看次数