标签: confidence-interval

计算最小二乘拟合的置信带

我有一个问题,我现在打了好几天.

如何计算拟合的(95%)置信区间?

将曲线拟合到数据是每个物理学家的日常工作 - 所以我认为这应该在某个地方实现 - 但我找不到这方面的实现,我也不知道如何以数学方式做到这一点.

我发现的唯一一件事就是线性最小二乘seaborn做得很好.

import numpy as np                                                                                                                                                                                                                         
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd

x = np.linspace(0,10)
y = 3*np.random.randn(50) + x

data = {'x':x, 'y':y}
frame = pd.DataFrame(data, columns=['x', 'y'])
sns.lmplot('x', 'y', frame, ci=95)

plt.savefig("confidence_band.pdf")
Run Code Online (Sandbox Code Playgroud)

线性最小二乘

但这只是线性最小二乘法.当我想要拟合例如饱和度曲线时饱和EQN,我搞砸了.

当然,我可以从最小二乘法的标准误差计算t分布,scipy.optimize.curve_fit但这不是我正在寻找的.

谢谢你的帮助!!

python statistics regression confidence-interval

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

R - 线之间的颜色或阴影区域

我正在尝试使用R在Excel上制作的图表进行复制,这应该表示围绕时间序列预测的95%置信区间(CI).Excel图表如下所示:

在此输入图像描述

所以,基本上,原始的历史时间序列,并从某个时间点预测它可能与其各自的CI.

他们在Excel上完成的方式效率有点低:

  1. 我有四个时间序列,大部分时间重叠;
  2. 实际/历史时间序列(上面的蓝线)在预测开始时停止;
  3. 在预测期开始之前,预测(上面点缀为红色)只是隐藏在蓝色的预测之下;
  4. 然后我有一个时间序列表示CI的上限和下限之间的差异,它与Excel Stacked Areas图表一起使用,成为上图中的阴影区域.

显然,生成预测和CI的计算速度更快,更容易推广和使用R,虽然我可以在R上完成任务然后只需复制Excel上的输出来绘制图表,在R中执行所有操作更好.

在问题的最后,我提供了dput()@MLavoie建议的原始数据.

在这里我加载的包(不确定你在这里需要它们,但它们是我经常使用的):

    require(zoo)
    require(xts)
    require(lattice)
    require(latticeExtra)
Run Code Online (Sandbox Code Playgroud)

对于前100行,我的数据如下所示:

    > head(data)
               fifth_percentile   Median nintyfifth_percentile
    2017-06-18         1.146267 1.146267              1.146267
    2017-06-19         1.134643 1.134643              1.134643
    2017-06-20         1.125664 1.125664              1.125664
    2017-06-21         1.129037 1.129037              1.129037
    2017-06-22         1.147542 1.147542              1.147542
    2017-06-23         1.159989 1.159989              1.159989
Run Code Online (Sandbox Code Playgroud)

然后在100个数据点之后,时间序列开始发散,最后它们看起来像这样:

    > tail(data)
               fifth_percentile   Median nintyfifth_percentile
    2017-12-30        0.9430930 1.125844              1.341603
    2017-12-31        0.9435227 1.127391              1.354928
    2018-01-01        0.9417235 1.124625              1.355527
    2018-01-02        0.9470077 1.124088              1.361420
    2018-01-03        0.9571596 1.127299              1.364005
    2018-01-04        0.9515535 1.127978              1.369536
Run Code Online (Sandbox Code Playgroud)

解决方案由DaveTurek提供

感谢DaveTurek,我找到了答案.但是,唯一不同的是,对于我的xts数据帧,显然,我需要先将每列转换为数字(with …

r lattice confidence-interval xts timeserieschart

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

按R中的组引导结果向量

问题:如何使用boostrap来获得在协方差矩阵的特征值上计算的统计数据的置信区间,分别针对数据框中的每个组(因子级别)?

问题:我无法确定我需要包含适合该boot函数的这些结果的数据结构,或者是一种在组中"映射"引导程序并以适合绘图的形式获得置信区间的方法.

上下文:在heplots包中,boxM计算协方差矩阵相等的Box的M检验.有一种绘图方法可以生成进入此测试的对数决定因素的有用图.该图中的置信区间基于渐近理论近似.

> library(heplots)
> iris.boxm <- boxM(iris[, 1:4], iris[, "Species"])
> iris.boxm

        Box's M-test for Homogeneity of Covariance Matrices

data:  iris[, 1:4]
Chi-Sq (approx.) = 140.94, df = 20, p-value < 2.2e-16

> plot(iris.boxm, gplabel="Species")
Run Code Online (Sandbox Code Playgroud)

虹膜数据的对数决定因素图

绘图方法还可以显示特征值的其他函数,但在这种情况下没有可用的理论置信区间.

op <- par(mfrow=c(2,2), mar=c(5,4,1,1))
plot(iris.boxm, gplabel="Species", which="product")
plot(iris.boxm, gplabel="Species", which="sum")
plot(iris.boxm, gplabel="Species", which="precision")
plot(iris.boxm, gplabel="Species", which="max")
par(op)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

因此,我希望能够使用boostrap计算这些CI,并将其显示在相应的图中.

我尝试过的:

下面是提升这些统计数据的函数,但对于总样本,不考虑group(Species).

cov_stat_fun <- function(data, indices, 
            stats=c("logdet", "prod", "sum", "precision", "max")
            ) …
Run Code Online (Sandbox Code Playgroud)

r confidence-interval statistics-bootstrap

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

Logistic回归statsmodels的概率预测置信区间

我正在尝试从"统计学习简介"重新创建一个图,我无法弄清楚如何计算概率预测的置信区间.具体来说,我正在尝试重新创建该图的右侧面板(图7.1),该面板预测工资> 250的概率基于4度多项式的年龄和相关的95%置信区间.如果有人关心,工资数据就在这里.

我可以使用以下代码预测并绘制预测概率

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from sklearn.preprocessing import PolynomialFeatures

wage = pd.read_csv('../../data/Wage.csv', index_col=0)
wage['wage250'] = 0
wage.loc[wage['wage'] > 250, 'wage250'] = 1

poly = Polynomialfeatures(degree=4)
age = poly.fit_transform(wage['age'].values.reshape(-1, 1))

logit = sm.Logit(wage['wage250'], age).fit()

age_range_poly = poly.fit_transform(np.arange(18, 81).reshape(-1, 1))

y_proba = logit.predict(age_range_poly)

plt.plot(age_range_poly[:, 1], y_proba)
Run Code Online (Sandbox Code Playgroud)

但我对如何计算预测概率的置信区间感到茫然.我已经考虑过多次引导数据以获得每个时代的概率分布,但我知道有一种更简单的方法,这是我无法掌握的.

我有估计的系数协方差矩阵和与每个估计系数相关的标准误差.如果给出这些信息,我将如何计算上图中右侧面板所示的置信区间?

谢谢!

python confidence-interval statsmodels logistic-regression

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

Python中两个比例之差的置信区间

例如,在 AB 测试中,A 群体可能有 1000 个数据点,其中 100 个是成功的。而 B 可能有 2000 个数据点和 220 个成功。这使 A 的成功比例为 0.1,B 为 0.11,其 delta 为 0.01。如何在python中围绕这个delta计算这个置信区间?

统计模型可以对一个样本执行此操作,但似乎没有一个包来处理 AB 测试所必需的两个样本之间的差异。( http://www.statsmodels.org/dev/generated/statsmodels.stats.proportion.proportion_confint.html )

python statistics ab-testing confidence-interval

6
推荐指数
2
解决办法
4672
查看次数

如何在R中引导混合效果模型

我有这种格式的数据集(df)

index <- runif(n = 100,min = 0, max = 1)
type1 <- rep("low", 50)
type2 <- rep("high", 50)
type <- c(type1,type2)

level1 <- rep("single", 25)
level2 <- rep("multiple", 25)
level3 <- rep("single", 25)
level4 <- rep("multiple", 25)
level <- c(level1,level2,level3,level4)

block <- rep(1:5, 10)
set <- rep(1:5, 10)

df <- data.frame("index" = index,"type" = type, "level" = level, "block" = block, "set" = set)
df$block <- as.factor(df$block)
df$set <- as.factor(df$set)
Run Code Online (Sandbox Code Playgroud)

我想创建一个看起来像这样的模型

model <- lmer(index ~ type * level + …
Run Code Online (Sandbox Code Playgroud)

r confidence-interval mixed-models bootstrap-modal

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

如何计算神经网络预测的置信度分数

我正在使用深度神经网络模型(在 中实现keras)进行预测。像这样的东西:

def make_model():
 model = Sequential()       
 model.add(Conv2D(20,(5,5), activation = "relu"))
 model.add(MaxPooling2D(pool_size=(2,2)))    
 model.add(Flatten())
 model.add(Dense(20, activation = "relu"))
 model.add(Lambda(lambda x: tf.expand_dims(x, axis=1)))
 model.add(SimpleRNN(50, activation="relu"))
 model.add(Dense(1, activation="sigmoid"))    
 model.compile(loss = "binary_crossentropy", optimizer = adagrad, metrics = ["accuracy"])

 return model

model = make_model()
model.fit(x_train, y_train, validation_data = (x_validation,y_validation), epochs = 25, batch_size = 25, verbose = 1)

##Prediciton:
prediction = model.predict_classes(x)
probabilities = model.predict_proba(x) #I assume these are the probabilities of class being predictied
Run Code Online (Sandbox Code Playgroud)

我的问题是分类(二进制)问题。我希望计算其中每一个的置信度得分,prediction即我想知道 - 我的模型是 99% 确定它是“0”还是 58% …

machine-learning uncertainty confidence-interval keras tensorflow

6
推荐指数
2
解决办法
9063
查看次数

R:Bootstrap 百分位数置信区间

library(boot)
set.seed(1)
x=sample(0:1000,1000)
y=function(u,i) sum(x[i])
o=boot(x,y,1000)
theta1=NULL
theta1=cbind(theta1,o$t)
b=theta1[order(theta1)]
bp1=c(b[25], b[975])
ci=boot.ci(o,type="perc")
Run Code Online (Sandbox Code Playgroud)

我使用两种方法来构建引导百分位数置信区间,但我得到了两个不同的答案。

bp1=c(b[25], b[975]) get (480474,517834)
Run Code Online (Sandbox Code Playgroud)

同时ci=boot.ci(o,type="perc")得到 (480476, 517837 )

boot.ci 如何构建百分位区间?

r confidence-interval statistics-bootstrap

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

如何获得 lmer 对象的置信区间?

我正在尝试获取混合模型预测的置信区间。预测函数不输出任何置信区间。很少有 StackOverflow 答案建议使用 merTools 包中的 PredictInterval 函数来获取间隔,但是这两个函数的预测估计之间存在差异,我试图在下图中进行比较。有人可以让我知道我在这里做错了什么吗?另外,我尝试构建的实际模型与下面代码片段中显示的模型类似,其中除了截距之外我没有固定效果组件。

library(merTools)
library(lme4)

dat <- iris
mod <- lmer(Sepal.Length ~ 1 + (1 + Sepal.Width + Petal.Length + 
                                  Petal.Width|Species), data=dat)

c1 <- predict(mod, dat)
c2 <- predictInterval(mod, dat)

plot_data <- cbind(c1, c2)
plot_data$order <- c(1:nrow(plot_data))

library(ggplot2)
ggplot(plot_data) + geom_line(aes(x=order, y=c1), color='red') + 
  geom_ribbon(aes(x=order, ymin=lwr, ymax=upr), color='blue', alpha=0.2) +  
  geom_line(aes(x=order, y=fit), color='blue')
Run Code Online (Sandbox Code Playgroud)

红线表示预测“c1”,蓝线表示预测“c2”

在此输入图像描述

r predict lme4 confidence-interval mixed-models

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

计算一个样本中某一比例的置信区间

当样本量很小甚至样本量为 1 时,计算某个比例的置信区间 (CI) 的更好方法是什么?

\n\n

我目前正在计算一个样本中比例的 CI:\n在此输入图像描述

\n\n

然而,我的样本量非常小,有时甚至是 1。我还尝试了 \n小总体中比例 p 的近似 (1\xe2\x88\x92\xce\xb1)100% 置信区间,使用:\n在此输入图像描述

\n\n

具体来说,我正在尝试实现这两个公式来计算比例的 CI。如下图所示,在 2018 年第一季度,蓝色组周围没有 CI,因为在 2018 年第一季度有十分之一的人选择该项目。如果使用有限总体校正 (FPC),则当 N 为 1 时,它不会校正 CI。\n所以,我的问题是,以 100% 比例解决这个小样本量问题的最佳统计方法是什么。

\n\n

在此输入图像描述

\n\n
    \n
  • 如果能提供一个python的包来计算就太好了?谢谢!
  • \n
\n

python statistics confidence-interval

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