我试图使用ARMA ARIMA模型预测每周销售额.我找不到调整顺序(p,d,q)的函数statsmodels.目前R具有forecast::auto.arima()调整(p,d,q)参数的功能.
如何为我的模型选择正确的订单?为此目的,python中是否有可用的库?
当我尝试在GNU Octave上绘制图形并尝试使用plot时,它给出了以下输出
set terminal aqua enhanced title "Figure 1" size 560 420 font "*,6" dashlength 1
^
line 0: unknown or ambiguous terminal type; type just 'set terminal' for a list
Run Code Online (Sandbox Code Playgroud)
我使用的是Mac OS X 10.9.2.我试过用
octave:79> setenv("GNUTERM","X11")
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误.
我正在拟合一个模型来分析数据和预测.如果newdata在predict.lm()包含单个因子水平来说是未知的模型,所有的predict.lm()失败,并返回一个错误.
是否有一种很好的方法可以predict.lm()返回模型知道的那些因子水平的预测值和未知因子水平的NA,而不仅仅是错误?
示例代码:
foo <- data.frame(response=rnorm(3),predictor=as.factor(c("A","B","C")))
model <- lm(response~predictor,foo)
foo.new <- data.frame(predictor=as.factor(c("A","B","C","D")))
predict(model,newdata=foo.new)
Run Code Online (Sandbox Code Playgroud)
我希望最后一个命令返回对应于因子级别"A","B"和"C"的三个"真实"预测,并且NA对应于未知级别"D".
我需要计算一个长度我事先不知道的向量的条目.如何有效地做到这一点?
一个简单的解决方案是"增长"它:从一个小的或空的向量开始,并连续添加新的条目,直到达到停止标准.例如:
foo <- numeric(0)
while ( sum(foo) < 100 ) foo <- c(foo,runif(1))
length(foo)
# 195
Run Code Online (Sandbox Code Playgroud)
然而,出于性能原因,R中的"增长"载体是不受欢迎的.
当然,我可以"以块的形式增长":预先分配一个"大小合适"的矢量,填充它,当它满时加倍它的长度,最后将其缩小到大小.但这感觉容易出错,并且会产生不优雅的代码.
有没有更好或规范的方法来做到这一点?(在我的实际应用中,当然,计算和停止标准有点复杂.)
回复一些有用的评论
即使您事先不知道长度,您是否知道它理论上可能具有的最大长度?在这种情况下,我倾向于使用该长度初始化向量,并且在循环切割NA之后或基于最新的索引值移除未使用的条目.
不,事先不知道最大长度.
随着向量的增长,你需要保留所有的值吗?
是的,我愿意.
那么
rand_num <- runif(300); rand_num[cumsum(rand_num) < 100]你选择一个足够大的向量,你知道条件满足的概率很高吗?你当然可以检查一下,如果不符合则使用更大的数字.我已经测试过,直到runif(10000)它仍然比"增长"更快.
我的实际用例涉及动态计算,我不能简单地向量化(否则我不会问).
具体来说,为了近似负二项式随机变量的卷积,我需要计算2007年Furman中定理2中整数随机变量$ K $的概率质量,直到高累积概率.这些质量$ pr_k $涉及一些错综复杂的递归总和.
我有两个因素向量,并怀疑他们携带相同的信息直到重新标记.我怎样才能知道这是否正确?
我的问题是两个向量都很长(200,000个条目),有很多级别(4,000).有些级别是非常频繁的,但有一个"长尾"的级别只发生一次.
这是一个可重现的例子(对不起,我找不到一种方法来使它紧凑并仍然显示我的数据的属性):
foo <- structure(c(3213L, 428L, 104L, 59L, 23L, 17L, 15L, 9L, 5L, 6L,
1L, 5L, 3L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Dim = 69L, .Dimnames = structure(list( …Run Code Online (Sandbox Code Playgroud) 主要问题:假设您有一个离散的有限数据集$ d $.然后命令摘要(d)返回Min,1st quartile,Median,mean,3rd quartile和max.我的问题是:R使用什么公式来计算第一个四分位数?
背景:我的数据集是:d=c(1,2,3,3,4,9).summary(d)返回2.25第一个四分位数.现在,计算第一个四分位数的一种方法是选择值q1,使得25%的数据集小于等于q1.显然,这不是R正在使用的.所以,我想知道,R使用什么公式来计算第一个四分位数?
谷歌搜索这个话题甚至更加困惑,我找不到R使用的公式.输入help(summary)R对我也没有帮助.
strtoi(x,base=36) 将base36编码的字符串转换为整数:
strtoi("zzzz",base=36)
[1] 1679615
Run Code Online (Sandbox Code Playgroud)
有没有一个函数反转这个操作,即,给定一个正整数产生base36等价?基本上,我正在寻找一个itostr()这样的功能
itostr(1679615,base=36)
[1] "zzzz"
Run Code Online (Sandbox Code Playgroud)
(除了36之外我不需要任何基础,但是base参数会很好.)
我的理解是使用set.seed确保了可重复性,但是下面的R代码不是这种情况R 2.15.2.我在这里错过了什么吗?
set.seed(12345)
rnorm(5)
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875
rnorm(5)
[1] -1.8179560 0.6300986 -0.2761841 -0.2841597 -0.9193220
Run Code Online (Sandbox Code Playgroud) 我想将变量的值表示为R中散点中的点的颜色.
x <- rnorm(100) + 5
y <- rnorm(100) + 5
plot(x, y)
Run Code Online (Sandbox Code Playgroud)
在这里,我想使用变量作为着色的输入.但是,如果我尝试
plot(x, y, col = x)
Run Code Online (Sandbox Code Playgroud)
我很奇怪,可能很明显.现在我可以得到我想要的东西:
x_norm = (x - min(x)) / (max(x) - min(x))
col_fun <- colorRamp(c("blue", "red"))
rgb_cols <- col_fun(x_norm)
cols <- rgb(rgb_cols, maxColorValue = 256)
plot(x, y, col = cols)
Run Code Online (Sandbox Code Playgroud)

但这看起来有点复杂,并且要使用NA或NaN值,例如将它们设为黑色作为颜色,就不那么容易了.为了我.有一种简单的方法可以做到这一点,我忽略了吗?
我正在尝试使用auto.arima该forecast软件包创建30天的预测.我想捕捉长期趋势,所以我将其插入到xreg参数中.
数据:
dput(data)
structure(list(TKDate = structure(c(15706, 15707, 15708, 15709,
15710, 15711, 15712, 15713, 15714, 15715, 15716, 15717, 15718,
15719, 15720, 15721, 15722, 15723, 15724, 15725, 15726, 15727,
15728, 15729, 15730, 15731, 15732, 15733, 15734, 15735, 15736,
15737, 15738, 15739, 15740, 15741, 15742, 15743, 15744, 15745,
15746, 15747, 15748, 15749, 15750, 15751, 15752, 15753, 15754,
15755, 15756, 15757, 15758, 15759, 15760, 15761, 15762, 15763,
15764, 15765, 15766, 15767, 15768, 15769, 15770, 15771, 15772,
15773, 15774, …Run Code Online (Sandbox Code Playgroud) 在R中,我使用outline = FALSE参数在绘制特定集合的框和晶须时排除异常值.它的工作非常出色,但让我想知道它究竟是如何确定哪些元素是异常值的.
boxplot(x, horizontal = TRUE, axes = FALSE, outline = FALSE)
Run Code Online (Sandbox Code Playgroud) 我想生成一系列的回报x,使得回报的标准差为0.03,产品为1 + x = 1.总而言之,回报有两个条件:
1) sd(x) == 0.03
2) prod(1+x) == 1
这是可能的,如果是这样,我怎样才能在R中实现它?
谢谢.
请考虑以下数据:
dataset <- c(0.5, 1.2, 1.5, 2.1, 2.0, 0.8, 1.4, 0, 2.4, 2.9, 2.9, 2.7, 1.4, -0.8, -0.4, -0.2)
Run Code Online (Sandbox Code Playgroud)
如何对大于1的连续条目求和?
1.2+1.5+2.1+2.0
1.4
2.4+2.9+2.9+2.7+1.4
Run Code Online (Sandbox Code Playgroud)
r ×12
forecasting ×2
plot ×2
random ×2
time-series ×2
allocation ×1
base36 ×1
boxplot ×1
colors ×1
lm ×1
octave ×1
outliers ×1
performance ×1
python ×1
quantile ×1
r-factor ×1
regression ×1
scale ×1
statistics ×1
statsmodels ×1
vector ×1