我有一个时间序列,我想每1小时自动执行一次平均值.我的数据包括温度和date_time(时间戳)
我不想要移动平均线,我想平均为1,2,3,4 ......,因为数据的频率通常是一天2分钟.
temperature date_time
1 -1.52 2007-09-29 00:00:08
2 -1.48 2007-09-29 00:02:08
3 -1.46 2007-09-29 00:04:08
4 -1.56 2007-09-29 00:06:08
5 -1.64 2007-09-29 00:08:08
6 -1.75 2007-09-29 00:10:08
7 -1.74 2007-09-29 00:12:08
8 -2.02 2007-09-29 00:14:08
9 -2.02 2007-09-29 00:16:08
10 -1.90 2007-09-29 00:18:08
11 -1.66 2007-09-29 00:20:08
12 -1.80 2007-09-29 00:22:08
13 -1.68 2007-09-29 00:24:08
14 -1.81 2007-09-29 00:26:08
15 -1.77 2007-09-29 00:28:08
16 -1.83 2007-09-29 00:30:08
17 -1.84 2007-09-29 00:32:08
18 -1.93 2007-09-29 00:34:08
19 -1.62 2007-09-29 …Run Code Online (Sandbox Code Playgroud) 我想在我自己的函数上按组应用优化:
这是一个可重复的数据集:
data <- data.frame(ID=c(1,1,1,2,2,3,3),C=c(1,1,1,2,2,3,4),
Lambda=c(0.5),s=c(1:7),
sigma_S=c(0.5,0.4,0.3,0.7,0.4,0.5,0.8),
d=c(20,30,40,50,60,70,80),
sigma_B=0.3,t=5,Rec=0.5,r=0.05)
Run Code Online (Sandbox Code Playgroud)
我的函数定义如下(函数很简单,我只想了解方法):
TestMSE <- function(LR)
{
d <- data
D <- LR + d$s
mse(d$C, D) # mse is from the Metrics Package
}
optimize(TestMSE,lower = 0.1, upper =1.5)
Run Code Online (Sandbox Code Playgroud)
我尝试使用ddply函数:
test <- ddply(data,"ID",summarise, optimize(TestMSE,lower = 0.1, upper =1.5))
Run Code Online (Sandbox Code Playgroud)
但是应用ddply函数我收到了所有组的相同解决方案,尽管子组存在差异.
谢谢.
我正在尝试使用R中的optim函数来优化模型中的三个参数,但无法弄清楚如何使用"优化"函数来搜索一系列值.我尝试使用for循环来做这个,这是我尝试中最成功的但是由于某种原因似乎停在355的值,理想情况下我想尝试更高的组合.除此之外,我尝试编写多次调用optim的函数,尝试向量化并尝试将列表值放入optim中的"par"参数中,但是所有这些尝试都产生了错误消息
"unable to evaluate at initial parameters".
Run Code Online (Sandbox Code Playgroud)
很长的任何人都知道如何使用optim函数搜索参数的一系列值,因为"优化"函数会???
任何帮助或指示将非常感谢!!!
我的代码看起来像:它是相应比例的三个最大似然函数,然后是三次尝试使用optim!
rm(list=ls())
load('Dat.RData')
mean(dat)
var(dat)
loglike<-function(par,dat,scale)
{ ptp<-dat[1:length(dat)-1]
ptp1<-dat[2:length(dat)]
r<-par['r']
k<-par['k']
sigma<-par['sigma']
if(scale=='log')
{
return(sum(dnorm(log(ptp1)-log(ptp)*exp(r-(ptp/k)),mean=0,sd=sigma,log=T)))
}
if (scale=='sqrt')
{
return(sum(dnorm(sqrt(ptp1)-sqrt(ptp)*exp(r-(ptp/k)),mean=0,sd=sigma,log=T)))
}
if (scale=='linear')
{
return(sum(dnorm(ptp1-ptp*exp(r-(ptp/k)),mean=0,sd=sigma,log=T)))
}
}
sqrts<-c()
for(i in 1:4000){
sqrts[i]<-optim(par=c(r=i,k=i,sigma=i),fn=loglike,dat=dat,scale='sqrt',method='Nelder-Mead',control=list(fnscale=-1))
}
logs<-c()
for(i in 1:4000){
logs[i]<-optim(par=c(r=i,k=i,sigma=i),fn=loglike,dat=dat,scale='log',method='Nelder-Mead',control=list(fnscale=-1))
}
lins<-c()
for(i in 1:4000){
lins[i]<-optim(par=c(r=i,k=i,sigma=i),fn=loglike,dat=dat,scale='linear',method='Nelder-Mead',control=list(fnscale=-1))
}
Run Code Online (Sandbox Code Playgroud)
非常感谢!!
我正在使用visual studio 2012(windows),我正在尝试编写一个高效的c ++函数来从一个大的字符串向量中删除一些单词.
我正在使用stl算法.我是一名c ++初学者,所以我不确定这是最好的方法.这就是我所做的:
#include <algorithm>
#include <unordered_set>
using std::vector;
vector<std::string> stripWords(vector<std::string>& input,
std::tr1::unordered_set<std::string>& toRemove){
input.erase(
remove_if(input.begin(), input.end(),
[&toRemove](std::string x) -> bool {
return toRemove.find(x) != toRemove.end();
}));
return input;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,它不会遍历所有输入向量.
这是我如何测试我的代码:
vector<std::string> in_tokens;
in_tokens.push_back("removeme");
in_tokens.push_back("keep");
in_tokens.push_back("removeme1");
in_tokens.push_back("removeme1");
std::tr1::unordered_set<std::string> words;
words.insert("removeme");
words.insert("removeme1");
stripWords(in_tokens,words);
Run Code Online (Sandbox Code Playgroud) 我想计算固定间隔(例如2)的坐标(第1列)的值(第2列)的平均值.但是,具有值的坐标的数量是可变的.我也想尝试不同大小的窗户.
数据示例(标签分隔)
2 3
2 4
2 5
3 1
4 2
5 1
5 2
6 8
Run Code Online (Sandbox Code Playgroud)
窗口大小为2的所需输出(我们每移动两个X值)
x mean window
2 3.25 2-3
3 3.25 2-3
4 1.66 4-5
5 1.66 4-5
6 8 6-7
Run Code Online (Sandbox Code Playgroud)
感谢您的时间和帮助!