小编Dri*_*ies的帖子

ggplot2 geom_smooth,方法的扩展模型= lm

我想用来geom_smooth从某个线性回归模型中得到拟合线.

在我看来,公式只能采取x,y而不是任何额外的参数.

为了更清楚地显示我想要的东西:

library(dplyr)
library(ggplot2)
set.seed(35413)
df <- data.frame(pred = runif(100,10,100),
           factor = sample(c("A","B"), 100, replace = TRUE)) %>%
  mutate(
    outcome = 100 + 10*pred + 
    ifelse(factor=="B", 200, 0) + 
    ifelse(factor=="B", 4, 0)*pred +
    rnorm(100,0,60))
Run Code Online (Sandbox Code Playgroud)

ggplot(df, aes(x=pred, y=outcome, color=factor)) +
  geom_point(aes(color=factor)) +
  geom_smooth(method = "lm") +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

我生产的装配线,由于color=factor选项,基本上是线性模型的输出lm(outcome ~ pred*factor, df)

在此输入图像描述

但是,在某些情况下,我更喜欢将线条作为不同模型拟合的输出,例如lm(outcome ~ pred + factor, df),我可以使用以下内容:

fit <- lm(outcome ~ pred+factor, df)
predval <- expand.grid(
  pred = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

17
推荐指数
1
解决办法
1839
查看次数

高效枚举具有常和的多项式 - R

假设我有一个 N 面骰子,每一面的概率不均匀,我将其扔了 M 次。现在我们不再观察个体结果,而是只观察总和。

我必须对可能性进行编码,其中我必须对仅限于观察到的总和的多项可能性分量进行求和。

如果 N=3,M = 2 并且总和为 4,那么很明显,我必须对其中一个投掷为 1、另一个投掷为 3 的两种情况加上两者均为 2 的情况进行求和。

我还可以枚举所有可能性,计算总和并将计算限制为我感兴趣的总和的组合,但显然随着 N 和 M 的增加,这很快就会变得棘手。

所以我正在寻找一种有效的方法来选择 R 中的常和组合。

r constraints combinatorics memory-efficient

7
推荐指数
1
解决办法
187
查看次数

Rmarkdown 裁剪 ggplots 周围的空白区域

尽管我在这里使用水平条形图作为示例,但这本身并不是问题。一般问题是如何处理使用后在 rmarkdown 中 ggplots 周围创建的空白

+坐标_固定(比率=...)

为了减少条形图使用的空间,特别是在因子较少的情况下,我更喜欢水平条形图,其中我使用 coord_fixed(ratio=...) 来使条形的宽度和长度之间具有合理的比率。

绘图本身看起来像我想要的那样(请参见下面的第一个示例),但它周围有很多空白,我尝试通过在 knit-header 中使用 Fig.height = ... 来删除它。正如下一个示例所示,结果并不理想。

library(ggplot2)
library(ggstance)
library(dplyr)

X <- data.frame(X = sample(c("A", "B"), 30, replace = TRUE))
X <- X %>% group_by(X) %>% summarise(n = n())
ggplot(X, aes(y = X, x = n))+
   geom_barh(stat = "identity")+
   coord_fixed(ratio = 1)+
   ggtitle("blub")
Run Code Online (Sandbox Code Playgroud)

在 rmarkdown 中使用它,我使用了 x = 3 ;x = 1 ; x=0.5:

```{r,fig.height = x}

# see code above
```
Run Code Online (Sandbox Code Playgroud)

这导致:

图.height=3

在此输入图像描述

图高度=1

在此输入图像描述

图高度=0.5

在此输入图像描述

我希望它能做什么:

  • 裁剪白色边缘
  • 同时保持绘图(绘图+(轴)标题)面积本身不变

后者显然不会发生,因为绘图区域变得更窄并且标题被移动到绘图内部。

我不知道解决方案是在 …

r ggplot2 r-markdown

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

图中每个因子水平的颜色

一个客户要我做像一个阴谋这样.此引用使用rgl-package,但导出数字的质量太低.因此,我从剧情开始.我可以管理我想要做的大部分事情,但由于某种原因,所有的酒吧都有不同的颜色.

MWE:

X<-1:60
Y<-sort(runif(60,-3,3))
Z<-runif(60,0,50)

p<-plot_ly(x = c(X[1],X[1]+1,X[1]+1,X[1]),
    y = c(0,0,Y[1],Y[1]), z=c(0,0,0,0),type = "mesh3d",color=I("red"))

for(i in X){p<-add_trace(p,x = c(i,i+1,i+1,i), 
          y = c(0,0,Y[i],Y[i]),  z=c(0,0,0,0),type = "mesh3d",color=I("red"))}
for(i in X){p<-add_trace(p,x = c(i,i+1,i+1,i), 
          y = c(0,0,0,0), z=c(0,0,Z[i],Z[i]),type = "mesh3d",i=c(0,0),
         j=c(1,2),k=c(2,3),color=I("black"))}

p
Run Code Online (Sandbox Code Playgroud)

虽然我期待红色和黑色的东西,但我得到了这个多彩的结果: 在此输入图像描述

我实际上正在寻找的是类似下面的内容,每个因子级别都有一个颜色,但是现在,结果与上面的相同:

X<-1:60
Y<-sort(runif(60,-3,3)) 
Z<-runif(60,0,50)
ColFactor<-sample(c(0,1),60,replace = TRUE)

p<-plot_ly(x = c(X[1],X[1]+1,X[1]+1,X[1]), y = c(0,0,Y[1],Y[1]), z=c(0,0,0,0),
    type = "mesh3d",color=ColFactor,colors=c("red","blue"))

for(i in X){p<-add_trace(p,x = c(i,i+1,i+1,i), y = c(0,0,Y[i],Y[i]), z=c(0,0,0,0),
    type = "mesh3d",color=ColFactor,colors=c("red","blue"))}
for(i in X){p<-add_trace(p,x = c(i,i+1,i+1,i), y = c(0,0,0,0), z=c(0,0,Z[i],Z[i]),
    type …
Run Code Online (Sandbox Code Playgroud)

r plotly

4
推荐指数
1
解决办法
431
查看次数

变量作为rmarkdown中的标题

简而言之:如何在rmarkdown中的块内打印html头(使用变量在代码块内创建头)?

总而言之

假设我的数据集中有多个变量(名称也存储在向量“ Vars”中),每组3个变量都属于同一主题。

我可以做一个循环来绘制所有变量,但是我想要标题。就像是:

主题1

绘制Var1

情节Var2

绘制Var3

主题2

情节Var 4

情节Var 5

...

以下伪代码有望解释我要执行的操作:

```{r}

for (i in Vars)

    if(i%%3 == 1){
        print(## Subject[ceiling(i/3)])}

    plot(i)


```
Run Code Online (Sandbox Code Playgroud)

r knitr r-markdown

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

mutate_at-涉及两个变量的函数

如果我有一个像

set.seed(1)    
df <- data.frame(X = 5:14,
       Y = runif(10,0,1),
       Z = runif(10,0,1))
Run Code Online (Sandbox Code Playgroud)

我可以

df %>% mutate(Y = if_else(X > 10, -Y, Y),
              Z = if_else(X > 10, -Z, Z))
Run Code Online (Sandbox Code Playgroud)

但是,如果我有很多要以相同方式转换的变量,则我更喜欢使用mutate_at。但是,在这种情况下,我无法正常工作。

我的尝试:

testfun <- function(y){if_else(X > 10, -y, y)}
df %>% mutate_at(vars(c("Y","Z")),funs(testfun))
Run Code Online (Sandbox Code Playgroud)

但这导致Evaluation error: object 'X' not found。我尝试了类似的变体get("X"),但没有用。有谁知道有效的变体吗?

r dplyr

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