小编A5C*_*2T1的帖子

为什么R中的optimx没有给出这个简单的非参数似然最大化的正确解?

optimx()是否提供了错误的解决方案,或者我错过了一个简单的观点?谢谢!

我试图最大化一个非常简单的可能性.在参数上未指定F的分布的意义上,这是非参数似然性.相反,对于每个观察到的xi,f(xi)=pi因此log(Likelihood)=Sum(log(f(xi)))=Sum(log(pi)).

我试图最大化的函数是:sum(log(pi))+lamda(sum(pi-1)) where sum(pi)=1(即这是一个约束最大化问题,可以使用拉格朗日乘数来解决).

这个问题的答案是数据点的数量pi=1/n在哪里n.但是,optimx似乎没有给出这个解决方案.有没有人有任何想法.如果n=2,我正在最大化的功能是log(p1)+log(p2)+lamda(p1+p2-1).

这是我的代码和R的输出:

n=2
log.like=function(p)
{
  lamda=p[n+1]
  ll=0
  for(i in 1:n){
    temp = log(p[i])+lamda*p[i]-lamda/(n)
    ll=ll+temp
  }
  return(-ll)
}


mle = optimx(c(0.48,.52,-1.5),
             log.like,
             lower=c(rep(0.1,2),-3),
             upper=c(rep(.9,2),-1),
             method = "L-BFGS-B")

> mle
             par  fvalues   method fns grs itns conv  KKT1 KKT2 xtimes
1 0.9, 0.9, -1.0 1.010721 L-BFGS-B   8   8 NULL    0 FALSE   NA      0
Run Code Online (Sandbox Code Playgroud)

等式的解决方案n=2p1=p2=1/2lamda=-2.但是,使用optimx时我没有得到这个.任何的想法?

optimization r maximization

9
推荐指数
1
解决办法
5709
查看次数

如何使用格子xyplot函数添加abline?

我试图绘制两个变量:Eeff vs Neff使用格子包的xyplot函数.我想知道如何在这个散点图中添加一条线(这是普通R图形系统中的abline函数).

xyplot(Neff ~ Eeff, data = phuong,
       xlab = "Energy efficiency (%)", 
       ylab = "Nitrogen efficiency (%)")
Run Code Online (Sandbox Code Playgroud)

r lattice

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

R reshape2中的cast()调用的自定义聚合函数出错

我想使用R将具有非唯一rownames的表中的数值数据汇总到具有唯一行名的结果表,其中值使用自定义函数进行汇总.摘要逻辑是:如果最大值与最小值的比率<1.5,则使用值的均值,否则使用中值.因为表非常大,我试图在reshape2包中使用melt()和cast()函数.

# example table with non-unique row-names
tab <- data.frame(gene=rep(letters[1:3], each=3), s1=runif(9), s2=runif(9))
# melt
tab.melt <- melt(tab, id=1)
# function to summarize with logic: mean if max/min < 1.5, else median
summarize <- function(x){ifelse(max(x)/min(x)<1.5, mean(x), median(x))}
# cast with summarized values
dcast(tab.melt, gene~variable, summarize)

上面的最后一行代码会导致错误通知.

Error in vapply(indices, fun, .default) : 
  values must be type 'logical',
 but FUN(X[[1]]) result is type 'double'
In addition: Warning messages:
1: In max(x) : no non-missing arguments to max; returning -Inf …

casting aggregate r reshape reshape2

8
推荐指数
2
解决办法
5614
查看次数

在R中绘制数据与时间的关系

我有一个数据框,其中一列为日期/时间(内部存储为数字),其他列为数字/整数,我想根据日期/时间绘制数据.

使用以下内容填充数据框中的日期/时间.

as.POSIXct(strptime(time, '%H:%M:%S %p %m/%d/%Y',tz='GMT')) 
Run Code Online (Sandbox Code Playgroud)

class(table$time)numeric.

  1. 如何绘制x轴中的数据并将其显示为某种格式的可读日期时间.
  2. 如何绘制行,而不是所有的行例的子集:行之间dateTime1以及dateTime2地方dateTime1dateTime2在一定的格式给定的日期.

plot datetime r ggplot2

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

中位数的函数类似于"which.max"和"which.min"/从data.frame中提取中值行

我偶尔需要根据其中一个变量的值从data.frame中提取特定的行.R具有maximum(which.max())和minimum(which.min())的内置函数,可以让我轻松地提取这些行.

中位数是否等价?或者我最好还是写自己的功能?

这是一个示例data.frame以及我将如何使用which.max()which.min():

set.seed(1) # so you can reproduce this example
dat = data.frame(V1 = 1:10, V2 = rnorm(10), V3 = rnorm(10), 
                 V4 = sample(1:20, 10, replace=T))

# To return the first row, which contains the max value in V4
dat[which.max(dat$V4), ]
# To return the seventh row, which contains the min value in V4
dat[which.min(dat$V4), ]
Run Code Online (Sandbox Code Playgroud)

对于这个特定的例子,由于存在偶数个观察,我需要返回两行,在这种情况下,行2和10.

更新

似乎没有内置功能.因此,使用Sacha回复作为起点,我写了这个函数:

which.median = function(x) {
  if (length(x) …
Run Code Online (Sandbox Code Playgroud)

r subset dataframe

8
推荐指数
2
解决办法
7831
查看次数

如何在没有NA值的data.frame中选择行

我有一个叫做数据的数据框.我想创建一个函数f(data,collist).此函数从数据本身获取数据和列列表,并仅返回数据中的那些行,其中collist中提到的列名称不是NA.我知道它可以使用for循环完成,但我想在不使用for循环的情况下完成它.

另外,如果R中通常更有效,以避免循环,请告诉我.

这是一个例子:

 A   B   C   D
 1   2  NA  NA
 2  NA  NA  NA
NA   3   7   5
NA   4   2  NA
 5   6  NA  NA
Run Code Online (Sandbox Code Playgroud)

如果collist包含B和C,则将返回行号为1,3,4的简化数据帧.原因是B或C或两者在第2行和第5行都有NA.我想要一个函数,因为我将使用这个操作很多次.通过这个问题,我将学习一些新的R技巧,以及让我的整个程序更优雅.谢谢.

r dataframe

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

从多个数据帧列到一个向量的值

我有一个数据框df,有很多cols,说100行.

如何从名称为"alpha","gamma"和"zeta"的列中获取所有级别值,并将其中的300个存储在单个向量中?

r dataframe

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

如何获得聚合函数的所有总和?

这是一些示例数据:

dat="x1 x2 x3 x4 x5
1   C  1 16 NA 16
2   A  1 16 16 NA
3   A  1 16 16 NA
4   A  4 64 64 NA
5   C  4 64 NA 64
6   A  1 16 16 NA
7   A  1 16 16 NA
8   A  1 16 16 NA
9   B  4 64 32 32
10  A  3 48 48 NA
11  B  4 64 32 32
12  B  3 48 32 16"

data<-read.table(text=dat,header=TRUE)   
aggregate(cbind(x2,x3,x4,x5)~x1, …
Run Code Online (Sandbox Code Playgroud)

aggregate r

8
推荐指数
2
解决办法
5027
查看次数

如何抑制R启动消息?

在Windows 7上运行

rterm < foo.r > temp.txt
Run Code Online (Sandbox Code Playgroud)

输出文件以:

R version 3.0.1 (2013-05-16) -- "Good Sport"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Run Code Online (Sandbox Code Playgroud)

和进一步的文字.

如何抑制此消息?我没有看到在Rprofile.site文件中执行此操作的选项.当然我可以使用另一个程序删除输出文件的前N行,但是抑制启动消息更优雅吗?

r

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

数字和索引向量到data.table

将以下向量放入data.table以及每个数字的索引的最佳方法是什么?

nVector <- c("20 37", "38 23", "39 48", "45 76", "65 44", "86 95 80")
Run Code Online (Sandbox Code Playgroud)

这是我的,有更好的方法吗?

vLength <- unname(sapply(nVector, function(x) length(unlist( strsplit(x, " "))) ))
vSeq <- seq(1, length(vLength))
vPosition <- vector("list", length(vLength))

for(i in 1:length(vLength))
{
  vPosition[[i]] <- rep(vSeq[i], vLength[i])
}

DT <- data.table(index = unlist(vPosition),
                 value = unlist(strsplit(nVector, " ")))
Run Code Online (Sandbox Code Playgroud)

注意:向量的长度约为125k,并且有大约2000万个值.

r data.table

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