在R中查找删失变量的分布参数

时间:2014-10-15 08:17:38

标签: r statistics truncation

我有一个由单个变量组成的数据集,该变量恰好被删除(审查点为0)。我认为潜在变量(即在发生审查之前的变量)或多或少遵循正态分布。我怎样才能 - 使用R - 找到这个分布的参数?

考虑到R-packages的丰富,我很惊讶我找不到任何可以轻易解决手头问题的东西。从名称来看,fitdistrplus-package中的 fitdistcens -function可能在此上下文中很有用。但如果我正确阅读文档 - 我怀疑 - 该函数需要两列,其中一列应包含未经审查的数据:

  

censdata 两列的数据框,分别命名为left和right,将每个观察值描述为间隔。左栏包含用于左删失观察的NA,用于区间删失观察的间隔的左边界,或用于非删失观察的观察值。右栏包含用于右删失观察的NA,用于区间删失观察的间隔的右边界,或用于非删失观察的观察值。

这是否意味着该功能不能用于我的目的?如果有的话有什么替代方案?

非常感谢帮助(可能涉及一个例子)。

2 个答案:

答案 0 :(得分:0)

我写了大量的R代码,似乎可以完成这项任务:

#Set censoring point
a<-0 

#Generate random censored data
x<-rnorm(1000,-1,2)
x[x<a]<-a
length(which(x>a))

#Log-likelihood function
ll<-function(u=0,s=1){
-sum(pnorm(a,mean=u,sd=s,log=TRUE)*(x==a)+dnorm(x,mean=u,sd=s,log=TRUE)*(x>a))
}

#Run MLE - change initiation values (u and s)
require("stats4")
est<-mle(ll,start=list(u=0,s=1),,method="L-BFGS-B",lower = c(-Inf, 0))

#Show fit
plot.ecdf(x)
xplot<-seq(from=a,to=max(x),length=100)
lines(xplot,pnorm(xplot,mean=est@coef[1],sd=est@coef[2]),col="green")

答案 1 :(得分:0)

我遇到了同样的事情,我相信你必须在观察被审查时指定右侧的最小值和左侧的NA。

例如,这里的模拟显示了很多:

library(fitdistrplus)

# These are the actual parameters of the right-censored, normal distribution to be fit
mu <- 10; sd <- 10; 

# Number of samples to use
n <- 100000; 

# Minimum value to censor at
x.min <- 0

# Create the sample to fit
x <- rnorm(n, p1, p2)


d <- data.frame(
  left= ifelse(x <= x.min, NA, x),   # Assign left side as NA when censored
  right=ifelse(x <= x.min, x.min, x) # Assign right side as x.min when censored
)
fitdistcens(d, 'norm')
# Fitting of the distribution ' norm ' on censored data by maximum likelihood 
# Parameters:
#      estimate
# mean 10.01450
# sd   10.00456