@@ -95,36 +95,51 @@ util_chisquare_param_estimate <- function(.x, .auto_gen_empirical = TRUE) {
95
95
}
96
96
97
97
# Parameters ----
98
- estimate_chisq_params <- function (data ) {
99
- # Negative log-likelihood function
100
- negLogLik <- function (df , ncp ) {
101
- - sum(stats :: dchisq(data , df = df , ncp = ncp , log = TRUE ))
102
- }
103
-
104
- # Initial values (adjust based on your data if necessary)
105
- start_vals <- list (df = trunc(var(data )/ 2 ), ncp = trunc(mean(data )))
106
-
107
- # MLE using bbmle
108
- mle_fit <- bbmle :: mle2(negLogLik , start = start_vals )
109
- # Return estimated parameters as a named vector
110
- df <- dplyr :: tibble(
111
- est_df = bbmle :: coef(mle_fit )[1 ],
112
- est_ncp = bbmle :: coef(mle_fit )[2 ]
113
- )
114
- return (df )
98
+ # estimate_chisq_params <- function(data) {
99
+ # # Negative log-likelihood function
100
+ # negLogLik <- function(df, ncp) {
101
+ # -sum(stats::dchisq(data, df = df, ncp = ncp, log = TRUE))
102
+ # }
103
+ #
104
+ # # Initial values (adjust based on your data if necessary)
105
+ # start_vals <- list(df = trunc(var(data)/2), ncp = trunc(mean(data)))
106
+ #
107
+ # # MLE using bbmle
108
+ # mle_fit <- bbmle::mle2(negLogLik, start = start_vals)
109
+ # # Return estimated parameters as a named vector
110
+ # df <- dplyr::tibble(
111
+ # est_df = bbmle::coef(mle_fit)[1],
112
+ # est_ncp = bbmle::coef(mle_fit)[2]
113
+ # )
114
+ # return(df)
115
+ # }
116
+ #
117
+ # safe_estimates <- {
118
+ # purrr::possibly(
119
+ # estimate_chisq_params,
120
+ # otherwise = NA_real_,
121
+ # quiet = TRUE
122
+ # )
123
+ # }
124
+ #
125
+ # estimates <- safe_estimates(x_term)
126
+ # Define negative log-likelihood function
127
+ neg_log_likelihood <- function (params ) {
128
+ df <- params [1 ]
129
+ ncp <- params [2 ]
130
+ sum_densities <- sum(dchisq(x_term , df = df , ncp = ncp , log = TRUE ))
131
+ return (- sum_densities )
115
132
}
116
133
117
- safe_estimates <- {
118
- purrr :: possibly(
119
- estimate_chisq_params ,
120
- otherwise = NA_real_ ,
121
- quiet = TRUE
122
- )
123
- }
134
+ # Initial guess for parameters
135
+ initial_params <- c(trunc(var(x_term )/ 2 ), trunc(mean(x_term )))
136
+
137
+ # Optimize parameters using optim() function
138
+ opt_result <- optim(par = initial_params , fn = neg_log_likelihood )
124
139
125
- estimates <- safe_estimates( x_term )
126
- doff <- estimates $ est_df | > unname()
127
- ncp <- estimates $ est_ncp | > unname()
140
+ # Extract estimated parameters
141
+ doff <- opt_result $ par [ 1 ]
142
+ ncp <- opt_result $ par [ 2 ]
128
143
129
144
# Return Tibble ----
130
145
if (.auto_gen_empirical ) {
@@ -139,7 +154,7 @@ util_chisquare_param_estimate <- function(.x, .auto_gen_empirical = TRUE) {
139
154
min = minx ,
140
155
max = maxx ,
141
156
mean = mean(x_term ),
142
- degrees_of_freedom = doff ,
157
+ dof = doff ,
143
158
ncp = ncp
144
159
)
145
160
0 commit comments