【问题标题】:chi-square distribution R卡方分布 R
【发布时间】:2015-05-04 16:37:30
【问题描述】:

尝试在 R 中使用 fitdistr() 拟合卡方分布。关于此的文档在这里(对我来说不是很有用):https://stat.ethz.ch/R-manual/R-devel/library/MASS/html/fitdistr.html

问题 1:chi_df 下面的输出如下:3.85546875 (0.07695236)。第二个数字是多少?方差还是标准差?

问题 2:fitdistr 生成由 Chi-SQ 分布定义的“k”。如何拟合数据以获得缩放常数“A”?我愚蠢地使用下面的第 14-17 行。显然不好。

问题 3:Chi-SQ 分布是否仅针对某个 x 范围定义? (方差定义为 2K,而均值 = k。这必须需要一些受约束的 x 范围......统计问题不是编程......)

nnn = 1000;
## Generating a chi-sq distribution
chii <- rchisq(nnn,4, ncp = 0);  
## Plotting Histogram
chi_hist <- hist(chii);   
## Fitting. Gives probability density which must be scaled.
chi_df <- fitdistr(chii,"chi-squared",start=list(df=3)); 
chi_k <- chi_df[[1]][1];

## Plotting a fitted line:
## Spanning x-length of chi-sq data
x_chi_fit <- 1:nnn*((max(chi_hist[[1]][])-min(chi_hist[[1]][]))/nnn);

## Y data using eqn for probability function
y_chi_fit <- (1/(2^(chi_k/2)*gamma(chi_k/2)) * x_chi_fit^(chi_k/2-1) * exp(-x_chi_fit/2));
## Normalizing to the peak of the histogram
y_chi_fit <- y_chi_fit*(max(chi_hist[[2]][]/max(y_chi_fit)));

## Plotting the line
lines(x_chi_fit,y_chi_fit,lwd=2,col="green");

感谢您的帮助!

【问题讨论】:

  • 1) 根据帮助文件的str(chi_df)Value: 部分,我收集到第二个值是估计值的标准差。
  • “这方面的文档很糟糕”——你能澄清一下吗?我发现文档非常好。例如,它或多或少地回答了您的第一个问题。
  • @rawr 不需要那些分号。事实上,R中不要使用分号
  • @rawr 的第一条评论是讽刺的,我想。第二个是模糊地指出这一点(我认为 - 这对我来说更加模糊)。 (注意:讽刺/讽刺不一定在在线环境中翻译得很好,尤其是在国际环境中......)
  • 准确地说,博克教授

标签: r distribution data-fitting chi-squared


【解决方案1】:
  1. 如上所述,?fitdistr

“fitdistr”类的一个对象,一个有四个组件的列表, ... sd:估计的标准误,

...所以括号内的数字是参数的标准误差。

  1. 比例参数不需要估计;您需要按直方图箱的宽度进行缩放在绘制直方图时只需使用freq=FALSE。请参阅下面的代码。

  2. 卡方分布是在非负实数上定义的,这是有道理的,因为它是平方标准正态分布(这是一个统计问题,而不是编程问题)。

    李>

设置数据:

nnn <- 1000
## ensure reproducibility; not a big deal in this case,
##  but good practice
set.seed(101)
## Generating a chi-sq distribution
chii <- rchisq(nnn,4, ncp = 0)  

拟合。

library(MASS)
## use method="Brent" based on warning
chi_df <- fitdistr(chii,"chi-squared",start=list(df=3),
                   method="Brent",lower=0.1,upper=100)
chi_k <- chi_df[[1]][1]

(对于它的价值,当使用 method="Brent" 时,fitdistr 的打印方法中似乎可能存在错误。您也可以使用 method="BFGS" 并且不需要指定边界...... )

直方图

chi_hist <- hist(chii,breaks=50,col="gray")
## scale by N and width of histogram bins
curve(dchisq(x,df=chi_k)*nnn*diff(chi_hist$breaks)[1],
      add=TRUE,col="green")
## or plot histogram already scaled to a density
chi_hist <- hist(chii,breaks=50,col="gray",freq=FALSE)   
curve(dchisq(x,df=chi_k),add=TRUE,col="green")

【讨论】:

  • 澄清问题 1:StDev/sqrt(counts) 中的标准错误? freq=FALSE 正是我想要的。非常感谢你们,你们真的是最棒的!
  • 此外,如果我沿 X 轴缩放“rchisq”,如何获得合适的拟合?:chii &lt;- 100*rchisq(nnn,4, ncp = 0)
  • 参数的标准误差是通过在最大对数似然估计值处估计对数似然曲面的曲率来计算的——与通过缩放样本计算平均值的标准误差不同sqrt(counts) 的标准偏差 [你问...] 如果你的值被缩放,这是一个更难的问题,需要一些自定义编码。也许是另一个问题。
猜你喜欢
  • 2014-07-27
  • 2011-06-20
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
相关资源
最近更新 更多