R:N(0,1)变量的二次函数的奇异pdf:编码错误还是舍入误差大?

R:N(0,1)变量的二次函数的奇异pdf:编码错误还是舍入误差大?,r,normal-distribution,rounding-error,chi-squared,R,Normal Distribution,Rounding Error,Chi Squared,我想计算随机变量y的pdf,其定义如下: y=c+b*x+a*x^2 pdf是非中心卡方分布。对于a>0,如果y小于d,则应等于零,其中d=c-(b^2)/4a 奇怪的是,当用R计算时,pdf在y>d+e处突然出现,e相当大 我的代码(以下)有错误吗?还是舍入错误?在后一种情况下,如何解决 set.seed(101) x <- seq(-3.5,3.5,length.out=1000) c<-80 b<-30 a<-6 y<-

我想计算随机变量y的pdf,其定义如下:

y=c+b*x+a*x^2
pdf是非中心卡方分布。对于a>0,如果y小于d,则应等于零,其中d=c-(b^2)/4a

奇怪的是,当用R计算时,pdf在y>d+e处突然出现,e相当大

我的代码(以下)有错误吗?还是舍入错误?在后一种情况下,如何解决

set.seed(101)       
x <- seq(-3.5,3.5,length.out=1000)  
c<-80   
b<-30   
a<-6    
y<-c+b*x+a*(x^2) # g(x) 
## min(y)   
set.seed(101)

一个快速而肮脏的实验表明它是真实的:

set.seed(101)
x2 <- rnorm(200000)
c <- 80; b<-30; a<-6
y <- c+b*x2+a*(x2^2)
par(las=1)
hist(y,breaks=500,col="gray",border=NA)
set.seed(101)

x2抱歉,我想以hello开头,但我不知道为什么,我的编辑未保存。
{}
图标将所选文本包含在代码块中,因此您不需要所有的回勾。我建议你编辑这篇文章来做到这一点。可能是因为我当时正在编辑。无论如何,不鼓励使用“你好/谢谢”等问候语。不推荐使用问候语。好的,我发了。是的,最后的办法是使用hist()或density()函数。但是在R中做一些与论文中不同的事情让我很恼火,我需要用pdf计算一些统计数据,比如概率质量和低于给定目标水平的部分平均值。此外,x将与其他变量交互,因此中心力矩的分析表达式将变得混乱,如果我得到一个干净的pdf函数,我可以从中导出这些不同的统计数据,这会更好。较低的平均值(不低于平均值),抱歉。是的,如果我得到一个干净的pdf函数来生成人工样本,从中我可以得到这些不同的统计数据,那就更好了。
g1.c<-(-b+sqrt((b^2)-4*a*(c-y)))/(2*a)  
g2.c<-(-b-sqrt((b^2)-4*a*(c-y)))/(2*a)  
g1.prime.c<-abs(1/sqrt((b^2)-4*a*(c-y)))    
fy<-dnorm(g1.c)*abs(g1.prime.c)+    
dnorm(g2.c)*abs(g1.prime.c) 
min(y)  
d<-c+(-(b^2)/(4*a)) 
plot(y,fy,type="l",lwd=2,ylab="density of y",xlab="y", ylim=c(0,0.015), 
main="y=80+30x+6x^2")   
lines(c(44.4,44.4),c(-1,0.01),lty=2)    
lines(c(d,d),c(-1,max(fy)),lty=2,col="red") 
legend("topright", c("d=42.5","d+e=44.4"),lty=2,col=c("red","black"))   
d<-c+(-(b^2)/(4*a)) 
first<- 1/(2*sqrt(a)*sqrt(y-d)) 
in_a1<-sqrt(y-d)/sqrt(a)    
in_a2<--sqrt(y-d)/sqrt(a)   
in_b<-b/(2*a)   
A<-in_a1-in_b   
B<-in_a2-in_b   
d   
min(y)  
fy_cdf<-first*(dnorm(A)+dnorm(B))   
plot(y,fy_cdf,type="l",lwd=2,ylab="density of y",xlab="y", ylim=c(0,0.015), 
main="y=80+30x+6x^2")   
lines(c(44.4,44.4),c(-1,0.01),lty=2)    
lines(c(d,d),c(-1,max(fy)),lty=2,col="red") 
legend("topright", c("d=42.5","d+e=44.4"),lty=2,col=c("red","black"))   
# library("miscTools")  
# compPlot(fy_cdf,fy)   
# diff<-fy_cdf-fy   
# summary(abs(diff)) # these are minor rounding errors, 
# no issue with that.   
set.seed(101)
x2 <- rnorm(200000)
c <- 80; b<-30; a<-6
y <- c+b*x2+a*(x2^2)
par(las=1)
hist(y,breaks=500,col="gray",border=NA)
hist(y[y<50],breaks=500,col="gray",border=NA)