gpt4 book ai didi

r - 如何强制 splinefun 值为正?

转载 作者:行者123 更新时间:2023-12-04 09:37:17 26 4
gpt4 key购买 nike

我使用 splinefun 中的值生成了一个 ggplot,但值在 0 附近的区域内不应为负,如下图所示。

我想知道如何将 splinefun 中的值为负数时强制为 0?谢谢!

sigma <- c(0,1,2,3,4,5,6,7,8,9,10,11,12)
sigma <- matrix(sigma,ncol=1)

myFunc_sig <- function(sigma){
exp(-2/sigma^2)
}

output_sigma <- apply(sigma, 1, myFunc_sig)
spl_fun <- splinefun(sigma, output_sigma)

ggplot(data.frame(x = sigma, y = output_sigma), aes(x, y))+
stat_function(fun = spl_fun, color = "orange")+
scale_x_continuous(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0))

The image is in this link

最佳答案

您可以通过指定 method="monoH.FC" 来要求样条函数是单调的。或 method="hyman"splinefun .例如:

library(tidyverse)

myFunc_sig <- function(sigma){
exp(-2/sigma^2)
}

sigma = 0:12
output_sigma <- myFunc_sig(sigma)
spl_fun <- splinefun(sigma, output_sigma, "monoH.FC")

ggplot(data.frame(x=sigma,y=output_sigma),aes(x,y)) +
stat_function(fun = spl_fun, color = "orange") +
geom_point() +
scale_x_continuous(expand = c(0, 0.1)) +
scale_y_continuous(expand = c(0, 0.02)) +
theme_bw()

enter image description here

并与 method="hyman"情节是这样的:

enter image description here

如果出于某种原因,您确实想对这些值进行人为调整,则可以在 ggplot 之外计算它们。并用 geom_line 绘制它们.例如:
x = seq(min(sigma),max(sigma),length=100)
y = spl_fun(x)

# Set negative values to zero
y[y<0] = 0

ggplot() +
geom_line(data=data.frame(x,y), aes(x,y), colour="orange") +
geom_point(data=data.frame(x=sigma, y=output_sigma), aes(x,y)) +
scale_x_continuous(expand = c(0, 0.1)) +
scale_y_continuous(expand = c(0, 0.02)) +
theme_bw()

enter image description here

关于r - 如何强制 splinefun 值为正?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47839053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com