我有一个问题,我现在打了好几天.
如何计算拟合的(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)

但这只是线性最小二乘法.当我想要拟合例如饱和度曲线时
,我搞砸了.
当然,我可以从最小二乘法的标准误差计算t分布,scipy.optimize.curve_fit但这不是我正在寻找的.
谢谢你的帮助!!
我正在尝试使用R在Excel上制作的图表进行复制,这应该表示围绕时间序列预测的95%置信区间(CI).Excel图表如下所示:
所以,基本上,原始的历史时间序列,并从某个时间点预测它可能与其各自的CI.
他们在Excel上完成的方式效率有点低:
显然,生成预测和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 …
问题:如何使用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) 我正在尝试从"统计学习简介"重新创建一个图,我无法弄清楚如何计算概率预测的置信区间.具体来说,我正在尝试重新创建该图的右侧面板(图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)
但我对如何计算预测概率的置信区间感到茫然.我已经考虑过多次引导数据以获得每个时代的概率分布,但我知道有一种更简单的方法,这是我无法掌握的.
我有估计的系数协方差矩阵和与每个估计系数相关的标准误差.如果给出这些信息,我将如何计算上图中右侧面板所示的置信区间?
谢谢!
例如,在 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 )
我有这种格式的数据集(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) 我正在使用深度神经网络模型(在 中实现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
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 如何构建百分位区间?
我正在尝试获取混合模型预测的置信区间。预测函数不输出任何置信区间。很少有 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”
当样本量很小甚至样本量为 1 时,计算某个比例的置信区间 (CI) 的更好方法是什么?
\n\n\n\n然而,我的样本量非常小,有时甚至是 1。我还尝试了 \n小总体中比例 p 的近似 (1\xe2\x88\x92\xce\xb1)100% 置信区间,使用:\n
具体来说,我正在尝试实现这两个公式来计算比例的 CI。如下图所示,在 2018 年第一季度,蓝色组周围没有 CI,因为在 2018 年第一季度有十分之一的人选择该项目。如果使用有限总体校正 (FPC),则当 N 为 1 时,它不会校正 CI。\n所以,我的问题是,以 100% 比例解决这个小样本量问题的最佳统计方法是什么。
\n\n\n\nr ×5
python ×4
statistics ×3
mixed-models ×2
ab-testing ×1
keras ×1
lattice ×1
lme4 ×1
predict ×1
regression ×1
statsmodels ×1
tensorflow ×1
uncertainty ×1
xts ×1